- From: Juan Carlos Cruellas <cruellas@ac.upc.edu>
- Date: Wed, 13 Jun 2007 16:45:49 +0200
- To: XMLSec <public-xmlsec-maintwg@w3.org>
Dear all, this should close action 36 of reviewing Konrad's proposal for annex on dealing with dots. 1. I would like to suggest first a small change in the last sentence of step 1 of the algorithm: Original: 'If the input buffer starts with a root slash "/" the output buffer is initialized with this root slash "/" otherwise with the empty string.' Proposed: 'If the input buffer starts with a root slash "/" then move this character to the output buffer, otherwise initialize the output buffer with the empty string.' The original text does not say explicitly that the leading "/" has to be eliminated from the input buffer and if implementations do not do that then they will not obtain good results. 2. I have gone through all the examples provided by Konrad. Assuming the behaviour indicated in step 1 and assuming also that rule 2.C finally reads as follows, following the indications by Konrad himself in http://lists.w3.org/Archives/Public/public-xmlsec-maintwg/2007Jun/0028.html : " D.if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and if also the output buffer is empty, last segment in the output buffer equals "../" or "..", where ".." is a complete path segment, then append ".." or "/.." for the latter case respectively to the output buffer else remove the last segment and its preceding "/" (if any) from the output buffer and if hereby the first character in the output buffer was removed and it was not the root slash then delete a leading slash from the input buffer; otherwise," I have obtained the same results as the ones in the annex. Below follow how the algorithm would get the final result step by step (just in case it could be useful in the future). In the tables below, 0. indicate the tasks corresponding to step 1 in the algorithm i.e. substitution of "//" by "/" as indicated and/or initialization of output buffer with a leading "/" in the input buffer. x.y x indicates step x of the process; y indicates the rule (A,B,C,D of step 2 in the algorithm) that applies in that step depending on the leading chars in the input buffer. FINAL (3) indicates the application of step 3 in the algorithm. Regards Juan Carlos. STEP OUTPUT INPUT no/.././/pseudo-netpath/seg/file.ext 0. no/.././pseudo-netpath/seg/file.ext 1.E no /.././pseudo-netpath/seg/file.ext 2.c "" ./pseudo-netpath/seg/file.ext 3.A "" pseudo-netpath/seg/file.ext 4.E pseudo-netpath /seg/file.ext 5.E pseudo-netpath/seg /file.ext 6.E pseudo-netpath/seg/file.ext ***AS IN ANNEx*** STEP OUTPUT INPUT no/..//.///pseudo-netpath/seg/file.ext 0. no/.././pseudo-netpath/seg/file.ext 1.E no /.././pseudo-netpath/seg/file.ext 1.C "" ./pseudo-netpath/seg/file.ext 1.A "" pseudo-netpath/seg/file.ext 1.E pseudo-netpath /seg/file.ext 1.E pseudo-netpath/seg /file.ext 1.E pseudo-netpath/seg/file.ext ***AS IN ANNEx*** STEP OUTPUT INPUT yes/no//..//.///pseudo-netpath/seg/file.ext 0. yes/no/.././pseudo-netpath/seg/file.ext 1.E yes /no/.././pseudo-netpath/seg/file.ext 2.E yes/no /.././pseudo-netpath/seg/file.ext 3.C yes /./pseudo-netpath/seg/file.ext 4.B yes /pseudo-netpath/seg/file.ext 5.E yes/pseudo-netpath /seg/file.ext 6.E yes/pseudo-netpath/seg /file.ext 7.E yes/pseudo-netpath/seg/file.ext ***AS IN ANNEx*** STEP OUTPUT INPUT no/../yes 1.E no /../yes 2.C "" yes 3.E yes ***AS IN ANNEx*** STEP OUTPUT INPUT no/../yes/ 1.E no /../yes/ 2.C "" yes/ 3.E yes / 4.E yes/ ***AS IN ANNEx*** STEP OUTPUT INPUT no/../yes/no/.. 1.E no /../yes/no/.. 2.C "" yes/no/.. 3.E yes /no/.. 4.E yes/no /.. 5.c yes / 6.E yes/ ***AS IN ANNEx*** STEP OUTPUT INPUT ../../no/../.. 1.A ../ ../no/../.. 2.A ../../ no/../.. 3.E ../../no /../.. 4.C ../.. /.. 5.C ../../.. / 6.E ../../../ ***AS IN ANNEx*** STEP OUTPUT INPUT no/../.. 1.E no /../.. 2.C "" .. 3.C .. FINAL (3) ../ ***AS IN ANNEx*** STEP OUTPUT INPUT no/.. 1.E no /.. 2.C "" ***AS IN ANNEx*** STEP OUTPUT INPUT no/../ 1.E no /.. 2.C "" ***AS IN ANNEx*** STEP OUTPUT INPUT /a/b/c/./../../g 0 / a/b/c/./../../g 1.E /a /b/c/./../../g 2.E /a/b /c/./../../g 3.E /a/b/c /./../../g 4.B /a/b/c /../../g 5.C /a/b /../g 6.C /a /g 7.E /a/g *** AS IN ANNEx *** STEP OUTPUT INPUT mid/content=5/../6 1.E mid /content=5/../6 2.E mid/content=5 /../6 3.C mid /6 4.E mid/6 ***AS IN ANNEx*** STEP OUTPUT INPUT ../../.. 1.A ../ ../.. 2.A ../../ .. 3.D ../../.. FINAL (3) ../../../ ***AS IN ANNEx*** STEP OUTPUT INPUT no/../../ 1.E no /../../ 2.C "" ../ 3.A ../ ***AS IN ANNEx*** STEP OUTPUT INPUT ..yes/..no/..no/..no/../../../..yes 1.E ..yes /..no/..no/..no/../../../..yes 2.E ..yes/..no /..no/..no/../../../..yes 3.E ..yes/..no/..no /..no/../../../..yes 4.E ..yes/..no/..no/..no /../../../..yes 5.C ..yes/..no/..no /../../..yes 6.C ..yes/..no /../..yes 7.C ..yes /..yes 8.E ..yes/..yes ***AS IN ANNEx*** STEP OUTPUT INPUT ..yes/..no/..no/..no/../../../..yes/ 1.E ..yes /..no/..no/..no/../../../..yes/ 2.E ..yes/..no /..no/..no/../../../..yes/ 3.E ..yes/..no/..no /..no/../../../..yes/ 4.E ..yes/..no/..no/..no /../../../..yes/ 5.C ..yes/..no/..no /../../..yes/ 6.C ..yes/..no /../..yes/ 7.C ..yes /..yes/ 8.E ..yes/..yes / 9.E ..yes/..yes/ ***AS IN ANNEx*** STEP OUTPUT INPUT ../.. 1.A ../ .. 2.D ../.. FINAL (3) ../../ ***AS IN ANNEx*** STEP OUTPUT INPUT ../../../ 1.A ../ ../../ 2.A ../../ ../ 3.A ../../../ ***AS IN ANNEx*** STEP OUTPUT INPUT . 1.D "" ***AS IN ANNEx*** STEP OUTPUT INPUT ./ 1.A "" ***AS IN ANNEx*** STEP OUTPUT INPUT ./. 1.A "" . 2.D "" ***AS IN ANNEx*** STEP OUTPUT INPUT //no/.. 0. /no/.. 0.BIS / no/.. 1.E /no /.. 2.C "" / 3.E / *** AS IN ANNEx *** STEP OUTPUT INPUT 0. ../../no/.. 1.A ../ ../no/.. 2.A ../../ no/.. 3.E ../../no /.. 4.C ../.. FINAL (3) ../../ ***AS IN ANNEx*** STEP OUTPUT INPUT ../../no/../ 1.A ../ ../no/../ 2.A ../../ no/../ 3.E ../../no /../ 4.C ../.. / 5.E ../../ ***AS IN ANNEx*** STEP OUTPUT INPUT yes/no/../ 1.E yes /no/../ 2.E yes/no /../ 3.C yes / 4.E yes/ ***AS IN ANNEx*** STEP OUTPUT INPUT yes/no/no/../.. 1.E yes /no/no/../.. 2.E yes/no /no/../.. 3.E yes/no/no /../.. 4.C yes/no /.. 5.C yes / 6.E yes/ ***AS IN ANNEx*** yes/no/no/no/../../.. --> yes/ Similar to the previous one. OK STEP OUTPUT INPUT yes/no/../yes/no/no/../.. 1.E yes /no/../yes/no/no/../.. 2.E yes/no /../yes/no/no/../.. 3.C yes /yes/no/no/../.. 4.E yes/yes /no/no/../.. 5.E yes/yes/no /no/../.. 6.E yes/yes/no/no /../.. 7.C yes/yes/no /.. 8.C yes/yes / 9.E yes/yes/ ***AS IN ANNEx*** yes/no/no/no/../../../yes yes/yes OK yes/no/no/no/../../../yes/ yes/yes/ OK STEP OUTPUT INPUT /no/../ 0. / no/../ 1.E /no /../ 2.C "" / 3.E / *** AS IN ANNEx *** STEP OUTPUT INPUT /yes/no/../ 0. / yes/no/../ 1.E /yes /no/../ 2.E /yes/no /../ 3.C /yes / 4.E /yes/ *** AS IN ANNEx *** STEP OUTPUT INPUT /yes/no/no/../.. 0. / yes/no/no/../.. 1.E /yes /no/no/../.. 2.E /yes/no /no/../.. 3.E /yes/no/no /../.. 4.C /yes/no /.. 5.C /yes / 6.E /yes/ ***AS IN ANNEx*** /yes/no/no/no/../../.. --> /yes/ Similar to the previous one (one more "no" and one more "/..") OK STEP OUTPUT INPUT ../../..no/.. 1.A ../ ../..no/.. 2.A ../../ ..no/.. 3.E ../../..no /.. 4.C ../.. / 5.E ../../ ***AS IN ANNEx*** ../../..no/../ -> ../../ Similar to previous OK STEP OUTPUT INPUT ..yes/..no/../ 1.E ..yes /..no/../ 2.E ..yes/..no /../ 3.C ..yes / 4.C ..yes/ ***AS IN ANNEx*** ..yes/..no/..no/../.. -> ..yes/ Similar to the previous one (one more "..no/" and one more "/.." OK ..yes/...no/..no/..no/../../.. -> ..yes/ Similar to the previous one OK STEP OUTPUT INPUT ..yes/..no/../..yes/..no/..no/../.. 1.E ..yes /..no/../..yes/..no/..no/../.. 2.E ..yes/..no /../..yes/..no/..no/../.. 3.C ..yes /..yes/..no/..no/../.. 4.E ..yes/..yes /..no/..no/../.. 5.E ..yes/..yes/..no /..no/../.. 6.E ..yes/..yes/..no/..no /../.. 7.C ..yes/..yes/..no /.. 8.C ..yes/..yes / 9.E ..yes/..yes/ ***AS IN ANNEx*** STEP OUTPUT INPUT /..no/../ 0. / ..no/../ 1.E /..no /../ 2.C "" / 3.C / ***AS IN ANNEx*** STEP OUTPUT INPUT /..yes/..no/../ 0. / ..yes/..no/../ 1.E /..yes /..no/../ 2.E /..yes/..no /../ 3.C /..yes / 4.E /..yes/ ***AS IN ANNEx*** /..yes/..no/..no/../.. -> /..yes/ Similar to the previous one (one more "..no/" and one more "../") OK /..yes/..no/..no/..no/../../.. -> /..yes/ Similar to the previous ones OK / --> / OK. starting "/" in the input goes to the output. /. --> / OK: Starting "/" in the input goes to the output. After that, rule 2.D (remove "." in input) /./ --> / OK: Starting "/" in the input goes to the output. After that, rule 2.A (remove "./" in input) STEP OUTPUT INPUT /./. 0. / ./. 1.A / . 2.C / ***AS IN ANNEx*** STEP OUTPUT INPUT /././ 0. / ././ 1.A / ./ 2.A / ***AS IN ANNEx*** STEP OUTPUT INPUT /.. 0. / .. 1.D / *** AS IN ANNEX *** STEP OUTPUT INPUT /../.. 0 / ../.. 1.A / .. 2.D / *** AS IN ANNEX *** /../../.. --> / OK. As in previous example but with one more "/.." segment. //.. --> / OK: pre-processor: input to "/.." and then it is like one of the previous examples. //..//.. --> / OK: pre-processor: input to "/../.." and then it is like one of the previous examples. //..//..//.. --> / OK: Pre-processor: input to "/../../.." and then it is like one of the previous examples. STEP OUTPUT INPUT /./.. 0. / ./.. 1.A / .. 2.D / *** AS IN ANNEX *** STEP OUTPUT INPUT /./.././.. 0. / ./.././.. 1.A / .././.. 2.A / ./.. 3.A / .. 4.D / *** AS IN ANNEX *** STEP OUTPUT INPUT /./.././.././.. 0. / ./.././.././.. 1.A / .././.././.. 2.A / ./.././.. 3.A / .././.. 4.A / ./.. 5.A / .. 6.D / *** AS IN ANNEX *** . -> "" OK. Rule 1.D. ./ --> "" OK. Rule 1.A STEP OUTPUT INPUT ./. 1.A "" . 2.D "" *** AS IN ANNEX *** STEP OUTPUT INPUT .. 1.D .. FINAL (3) ../ *** AS IN ANNEX *** STEP OUTPUT INPUT ../ 1.A ../ *** AS IN ANNEX *** ../ ../
Received on Wednesday, 13 June 2007 14:46:04 UTC