Fossil SCM
Fix the backslash-octal escapes on the filename quoting while importing from git.
Commit
09cf1ad8eecf502c225ff5711e50fe865f3ef920
Parent
167dec48fbbc2d4…
1 file changed
+14
-1
+14
-1
| --- src/import.c | ||
| +++ src/import.c | ||
| @@ -463,11 +463,24 @@ | ||
| 463 | 463 | if( zName==0 || zName[0]!='"' ) return; |
| 464 | 464 | n = (int)strlen(zName); |
| 465 | 465 | if( zName[n-1]!='"' ) return; |
| 466 | 466 | for(i=0, j=1; j<n-1; j++){ |
| 467 | 467 | char c = zName[j]; |
| 468 | - if( c=='\\' ) c = zName[++j]; | |
| 468 | + int x; | |
| 469 | + if( c=='\\' ){ | |
| 470 | + if( j+3 <= n-1 | |
| 471 | + && zName[j+1]>='0' && zName[j+1]<='3' | |
| 472 | + && zName[j+2]>='0' && zName[j+2]<='7' | |
| 473 | + && zName[j+3]>='0' && zName[j+3]<='7' | |
| 474 | + && (x = 64*(zName[j+1]-'0') + 8*(zName[j+2]-'0') + zName[j+3]-'0')!=0 | |
| 475 | + ){ | |
| 476 | + c = (unsigned char)x; | |
| 477 | + j += 3; | |
| 478 | + }else{ | |
| 479 | + c = zName[++j]; | |
| 480 | + } | |
| 481 | + } | |
| 469 | 482 | zName[i++] = c; |
| 470 | 483 | } |
| 471 | 484 | zName[i] = 0; |
| 472 | 485 | } |
| 473 | 486 | |
| 474 | 487 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -463,11 +463,24 @@ | |
| 463 | if( zName==0 || zName[0]!='"' ) return; |
| 464 | n = (int)strlen(zName); |
| 465 | if( zName[n-1]!='"' ) return; |
| 466 | for(i=0, j=1; j<n-1; j++){ |
| 467 | char c = zName[j]; |
| 468 | if( c=='\\' ) c = zName[++j]; |
| 469 | zName[i++] = c; |
| 470 | } |
| 471 | zName[i] = 0; |
| 472 | } |
| 473 | |
| 474 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -463,11 +463,24 @@ | |
| 463 | if( zName==0 || zName[0]!='"' ) return; |
| 464 | n = (int)strlen(zName); |
| 465 | if( zName[n-1]!='"' ) return; |
| 466 | for(i=0, j=1; j<n-1; j++){ |
| 467 | char c = zName[j]; |
| 468 | int x; |
| 469 | if( c=='\\' ){ |
| 470 | if( j+3 <= n-1 |
| 471 | && zName[j+1]>='0' && zName[j+1]<='3' |
| 472 | && zName[j+2]>='0' && zName[j+2]<='7' |
| 473 | && zName[j+3]>='0' && zName[j+3]<='7' |
| 474 | && (x = 64*(zName[j+1]-'0') + 8*(zName[j+2]-'0') + zName[j+3]-'0')!=0 |
| 475 | ){ |
| 476 | c = (unsigned char)x; |
| 477 | j += 3; |
| 478 | }else{ |
| 479 | c = zName[++j]; |
| 480 | } |
| 481 | } |
| 482 | zName[i++] = c; |
| 483 | } |
| 484 | zName[i] = 0; |
| 485 | } |
| 486 | |
| 487 |