Fossil SCM
Correctly escape ZIP and Tarball filenames for URLs. Limit SHA1 hashs on diff URLs using %S instead of %s. Limit the number of links to follow off of each page in the many-www.tcl test script.
Commit
76e8600b94210e4a83288264a278f423051e4b1d
Parent
691f18840211f8b…
3 files changed
+1
-1
+2
-2
+3
+1
-1
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -357,11 +357,11 @@ | ||
| 357 | 357 | hyperlink_to_user(zUser, zDate, ""); |
| 358 | 358 | @ branch: %h(zBr)) |
| 359 | 359 | if( g.perm.Hyperlink && zUuid ){ |
| 360 | 360 | const char *z = zFilename; |
| 361 | 361 | if( fpid ){ |
| 362 | - @ %z(href("%R/fdiff?v1=%s&v2=%s",zPUuid,zUuid))[diff]</a> | |
| 362 | + @ %z(href("%R/fdiff?v1=%S&v2=%S",zPUuid,zUuid))[diff]</a> | |
| 363 | 363 | } |
| 364 | 364 | @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z)) |
| 365 | 365 | @ [annotate]</a> |
| 366 | 366 | } |
| 367 | 367 | @ </td></tr> |
| 368 | 368 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -357,11 +357,11 @@ | |
| 357 | hyperlink_to_user(zUser, zDate, ""); |
| 358 | @ branch: %h(zBr)) |
| 359 | if( g.perm.Hyperlink && zUuid ){ |
| 360 | const char *z = zFilename; |
| 361 | if( fpid ){ |
| 362 | @ %z(href("%R/fdiff?v1=%s&v2=%s",zPUuid,zUuid))[diff]</a> |
| 363 | } |
| 364 | @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z)) |
| 365 | @ [annotate]</a> |
| 366 | } |
| 367 | @ </td></tr> |
| 368 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -357,11 +357,11 @@ | |
| 357 | hyperlink_to_user(zUser, zDate, ""); |
| 358 | @ branch: %h(zBr)) |
| 359 | if( g.perm.Hyperlink && zUuid ){ |
| 360 | const char *z = zFilename; |
| 361 | if( fpid ){ |
| 362 | @ %z(href("%R/fdiff?v1=%S&v2=%S",zPUuid,zUuid))[diff]</a> |
| 363 | } |
| 364 | @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z)) |
| 365 | @ [annotate]</a> |
| 366 | } |
| 367 | @ </td></tr> |
| 368 |
+2
-2
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -617,16 +617,16 @@ | ||
| 617 | 617 | @ </td></tr> |
| 618 | 618 | } |
| 619 | 619 | |
| 620 | 620 | /* The Download: line */ |
| 621 | 621 | if( g.perm.Zip ){ |
| 622 | - char *zUrl = mprintf("%R/tarball/%s-%S.tar.gz?uuid=%s", | |
| 622 | + char *zUrl = mprintf("%R/tarball/%t-%S.tar.gz?uuid=%s", | |
| 623 | 623 | zProjName, zUuid, zUuid); |
| 624 | 624 | @ </td></tr> |
| 625 | 625 | @ <tr><th>Downloads:</th><td> |
| 626 | 626 | @ %z(href("%s",zUrl))Tarball</a> |
| 627 | - @ | %z(href("%R/zip/%s-%S.zip?uuid=%s",zProjName,zUuid,zUuid)) | |
| 627 | + @ | %z(href("%R/zip/%t-%S.zip?uuid=%s",zProjName,zUuid,zUuid)) | |
| 628 | 628 | @ ZIP archive</a> |
| 629 | 629 | fossil_free(zUrl); |
| 630 | 630 | } |
| 631 | 631 | @ </td></tr> |
| 632 | 632 | @ <tr><th>Other Links:</th> |
| 633 | 633 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -617,16 +617,16 @@ | |
| 617 | @ </td></tr> |
| 618 | } |
| 619 | |
| 620 | /* The Download: line */ |
| 621 | if( g.perm.Zip ){ |
| 622 | char *zUrl = mprintf("%R/tarball/%s-%S.tar.gz?uuid=%s", |
| 623 | zProjName, zUuid, zUuid); |
| 624 | @ </td></tr> |
| 625 | @ <tr><th>Downloads:</th><td> |
| 626 | @ %z(href("%s",zUrl))Tarball</a> |
| 627 | @ | %z(href("%R/zip/%s-%S.zip?uuid=%s",zProjName,zUuid,zUuid)) |
| 628 | @ ZIP archive</a> |
| 629 | fossil_free(zUrl); |
| 630 | } |
| 631 | @ </td></tr> |
| 632 | @ <tr><th>Other Links:</th> |
| 633 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -617,16 +617,16 @@ | |
| 617 | @ </td></tr> |
| 618 | } |
| 619 | |
| 620 | /* The Download: line */ |
| 621 | if( g.perm.Zip ){ |
| 622 | char *zUrl = mprintf("%R/tarball/%t-%S.tar.gz?uuid=%s", |
| 623 | zProjName, zUuid, zUuid); |
| 624 | @ </td></tr> |
| 625 | @ <tr><th>Downloads:</th><td> |
| 626 | @ %z(href("%s",zUrl))Tarball</a> |
| 627 | @ | %z(href("%R/zip/%t-%S.zip?uuid=%s",zProjName,zUuid,zUuid)) |
| 628 | @ ZIP archive</a> |
| 629 | fossil_free(zUrl); |
| 630 | } |
| 631 | @ </td></tr> |
| 632 | @ <tr><th>Other Links:</th> |
| 633 |
+3
| --- test/many-www.tcl | ||
| +++ test/many-www.tcl | ||
| @@ -64,12 +64,15 @@ | ||
| 64 | 64 | puts [format {%.3fs} [expr {$ms/1000000.0}]] |
| 65 | 65 | flush stdout |
| 66 | 66 | if {[string length $x]>1000000} { |
| 67 | 67 | set x [string range $x 0 1000000] |
| 68 | 68 | } |
| 69 | + set k 0 | |
| 69 | 70 | while {[regexp {<[aA] .*?href="(/[a-z].*?)".*?>(.*)$} $x all url tail]} { |
| 70 | 71 | # if {$npending>2*($limit - $i)} break |
| 72 | + incr k | |
| 73 | + if {$k>100} break | |
| 71 | 74 | set u2 [string map {< < > > " \" & &} $url] |
| 72 | 75 | if {![info exists seen($u2)]} { |
| 73 | 76 | set next($u2) 1 |
| 74 | 77 | set seen($u2) 1 |
| 75 | 78 | } |
| 76 | 79 |
| --- test/many-www.tcl | |
| +++ test/many-www.tcl | |
| @@ -64,12 +64,15 @@ | |
| 64 | puts [format {%.3fs} [expr {$ms/1000000.0}]] |
| 65 | flush stdout |
| 66 | if {[string length $x]>1000000} { |
| 67 | set x [string range $x 0 1000000] |
| 68 | } |
| 69 | while {[regexp {<[aA] .*?href="(/[a-z].*?)".*?>(.*)$} $x all url tail]} { |
| 70 | # if {$npending>2*($limit - $i)} break |
| 71 | set u2 [string map {< < > > " \" & &} $url] |
| 72 | if {![info exists seen($u2)]} { |
| 73 | set next($u2) 1 |
| 74 | set seen($u2) 1 |
| 75 | } |
| 76 |
| --- test/many-www.tcl | |
| +++ test/many-www.tcl | |
| @@ -64,12 +64,15 @@ | |
| 64 | puts [format {%.3fs} [expr {$ms/1000000.0}]] |
| 65 | flush stdout |
| 66 | if {[string length $x]>1000000} { |
| 67 | set x [string range $x 0 1000000] |
| 68 | } |
| 69 | set k 0 |
| 70 | while {[regexp {<[aA] .*?href="(/[a-z].*?)".*?>(.*)$} $x all url tail]} { |
| 71 | # if {$npending>2*($limit - $i)} break |
| 72 | incr k |
| 73 | if {$k>100} break |
| 74 | set u2 [string map {< < > > " \" & &} $url] |
| 75 | if {![info exists seen($u2)]} { |
| 76 | set next($u2) 1 |
| 77 | set seen($u2) 1 |
| 78 | } |
| 79 |