Fossil SCM
suggested fix for [5ff2043c96]
Commit
d1f16f718ab7489b9e63db67040e7e6fc1cbab6c
Parent
1858d202ef890e5…
2 files changed
+8
-2
+2
-2
+8
-2
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -106,11 +106,14 @@ | ||
| 106 | 106 | va_list ap; |
| 107 | 107 | va_start(ap, zFormat); |
| 108 | 108 | zUrl = vmprintf(zFormat, ap); |
| 109 | 109 | va_end(ap); |
| 110 | 110 | if( g.perm.Hyperlink && !g.javascriptHyperlink ){ |
| 111 | - return mprintf("<a href=\"%z\">", zUrl); | |
| 111 | + char *link = htmlize(zUrl, strlen(zUrl)); | |
| 112 | + zUrl = mprintf("<a href=\"%z\">", link); | |
| 113 | + fossil_free(link); | |
| 114 | + return zUrl; | |
| 112 | 115 | } |
| 113 | 116 | if( nHref>=nHrefAlloc ){ |
| 114 | 117 | nHrefAlloc = nHrefAlloc*2 + 10; |
| 115 | 118 | aHref = fossil_realloc(aHref, nHrefAlloc*sizeof(aHref[0])); |
| 116 | 119 | } |
| @@ -142,15 +145,18 @@ | ||
| 142 | 145 | const char *zTitle, |
| 143 | 146 | const char *zLink, |
| 144 | 147 | ... |
| 145 | 148 | ){ |
| 146 | 149 | va_list ap; |
| 150 | + char *link; | |
| 147 | 151 | assert( nSubmenu < sizeof(aSubmenu)/sizeof(aSubmenu[0]) ); |
| 148 | 152 | aSubmenu[nSubmenu].zLabel = zLabel; |
| 149 | 153 | aSubmenu[nSubmenu].zTitle = zTitle; |
| 150 | 154 | va_start(ap, zLink); |
| 151 | - aSubmenu[nSubmenu].zLink = vmprintf(zLink, ap); | |
| 155 | + link = vmprintf(zLink, ap); | |
| 156 | + aSubmenu[nSubmenu].zLink = htmlize(link, strlen(link)); | |
| 157 | + fossil_free(link); | |
| 152 | 158 | va_end(ap); |
| 153 | 159 | nSubmenu++; |
| 154 | 160 | } |
| 155 | 161 | |
| 156 | 162 | /* |
| 157 | 163 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -106,11 +106,14 @@ | |
| 106 | va_list ap; |
| 107 | va_start(ap, zFormat); |
| 108 | zUrl = vmprintf(zFormat, ap); |
| 109 | va_end(ap); |
| 110 | if( g.perm.Hyperlink && !g.javascriptHyperlink ){ |
| 111 | return mprintf("<a href=\"%z\">", zUrl); |
| 112 | } |
| 113 | if( nHref>=nHrefAlloc ){ |
| 114 | nHrefAlloc = nHrefAlloc*2 + 10; |
| 115 | aHref = fossil_realloc(aHref, nHrefAlloc*sizeof(aHref[0])); |
| 116 | } |
| @@ -142,15 +145,18 @@ | |
| 142 | const char *zTitle, |
| 143 | const char *zLink, |
| 144 | ... |
| 145 | ){ |
| 146 | va_list ap; |
| 147 | assert( nSubmenu < sizeof(aSubmenu)/sizeof(aSubmenu[0]) ); |
| 148 | aSubmenu[nSubmenu].zLabel = zLabel; |
| 149 | aSubmenu[nSubmenu].zTitle = zTitle; |
| 150 | va_start(ap, zLink); |
| 151 | aSubmenu[nSubmenu].zLink = vmprintf(zLink, ap); |
| 152 | va_end(ap); |
| 153 | nSubmenu++; |
| 154 | } |
| 155 | |
| 156 | /* |
| 157 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -106,11 +106,14 @@ | |
| 106 | va_list ap; |
| 107 | va_start(ap, zFormat); |
| 108 | zUrl = vmprintf(zFormat, ap); |
| 109 | va_end(ap); |
| 110 | if( g.perm.Hyperlink && !g.javascriptHyperlink ){ |
| 111 | char *link = htmlize(zUrl, strlen(zUrl)); |
| 112 | zUrl = mprintf("<a href=\"%z\">", link); |
| 113 | fossil_free(link); |
| 114 | return zUrl; |
| 115 | } |
| 116 | if( nHref>=nHrefAlloc ){ |
| 117 | nHrefAlloc = nHrefAlloc*2 + 10; |
| 118 | aHref = fossil_realloc(aHref, nHrefAlloc*sizeof(aHref[0])); |
| 119 | } |
| @@ -142,15 +145,18 @@ | |
| 145 | const char *zTitle, |
| 146 | const char *zLink, |
| 147 | ... |
| 148 | ){ |
| 149 | va_list ap; |
| 150 | char *link; |
| 151 | assert( nSubmenu < sizeof(aSubmenu)/sizeof(aSubmenu[0]) ); |
| 152 | aSubmenu[nSubmenu].zLabel = zLabel; |
| 153 | aSubmenu[nSubmenu].zTitle = zTitle; |
| 154 | va_start(ap, zLink); |
| 155 | link = vmprintf(zLink, ap); |
| 156 | aSubmenu[nSubmenu].zLink = htmlize(link, strlen(link)); |
| 157 | fossil_free(link); |
| 158 | va_end(ap); |
| 159 | nSubmenu++; |
| 160 | } |
| 161 | |
| 162 | /* |
| 163 |
+2
-2
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -373,11 +373,11 @@ | ||
| 373 | 373 | /* Generate the "user: USERNAME" at the end of the comment, together |
| 374 | 374 | ** with a hyperlink to another timeline for that user. |
| 375 | 375 | */ |
| 376 | 376 | if( zTagList && zTagList[0]==0 ) zTagList = 0; |
| 377 | 377 | if( g.perm.Hyperlink && fossil_strcmp(zUser, zThisUser)!=0 ){ |
| 378 | - char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd", zUser, zDate); | |
| 378 | + char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd", zUser, zDate); | |
| 379 | 379 | @ (user: %z(href("%z",zLink))%h(zUser)</a>%s(zTagList?",":"\051") |
| 380 | 380 | }else{ |
| 381 | 381 | @ (user: %h(zUser)%s(zTagList?",":"\051") |
| 382 | 382 | } |
| 383 | 383 | |
| @@ -398,11 +398,11 @@ | ||
| 398 | 398 | while( z && z[0] ){ |
| 399 | 399 | for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){} |
| 400 | 400 | if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){ |
| 401 | 401 | blob_appendf(&links, |
| 402 | 402 | "%z%#h</a>%.2s", |
| 403 | - href("%R/timeline?r=%#t&nd&c=%t",i,z,zDate), i,z, &z[i] | |
| 403 | + href("%R/timeline?r=%#t&nd&c=%t",i,z,zDate), i,z, &z[i] | |
| 404 | 404 | ); |
| 405 | 405 | }else{ |
| 406 | 406 | blob_appendf(&links, "%#h", i+2, z); |
| 407 | 407 | } |
| 408 | 408 | if( z[i]==0 ) break; |
| 409 | 409 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -373,11 +373,11 @@ | |
| 373 | /* Generate the "user: USERNAME" at the end of the comment, together |
| 374 | ** with a hyperlink to another timeline for that user. |
| 375 | */ |
| 376 | if( zTagList && zTagList[0]==0 ) zTagList = 0; |
| 377 | if( g.perm.Hyperlink && fossil_strcmp(zUser, zThisUser)!=0 ){ |
| 378 | char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd", zUser, zDate); |
| 379 | @ (user: %z(href("%z",zLink))%h(zUser)</a>%s(zTagList?",":"\051") |
| 380 | }else{ |
| 381 | @ (user: %h(zUser)%s(zTagList?",":"\051") |
| 382 | } |
| 383 | |
| @@ -398,11 +398,11 @@ | |
| 398 | while( z && z[0] ){ |
| 399 | for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){} |
| 400 | if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){ |
| 401 | blob_appendf(&links, |
| 402 | "%z%#h</a>%.2s", |
| 403 | href("%R/timeline?r=%#t&nd&c=%t",i,z,zDate), i,z, &z[i] |
| 404 | ); |
| 405 | }else{ |
| 406 | blob_appendf(&links, "%#h", i+2, z); |
| 407 | } |
| 408 | if( z[i]==0 ) break; |
| 409 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -373,11 +373,11 @@ | |
| 373 | /* Generate the "user: USERNAME" at the end of the comment, together |
| 374 | ** with a hyperlink to another timeline for that user. |
| 375 | */ |
| 376 | if( zTagList && zTagList[0]==0 ) zTagList = 0; |
| 377 | if( g.perm.Hyperlink && fossil_strcmp(zUser, zThisUser)!=0 ){ |
| 378 | char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd", zUser, zDate); |
| 379 | @ (user: %z(href("%z",zLink))%h(zUser)</a>%s(zTagList?",":"\051") |
| 380 | }else{ |
| 381 | @ (user: %h(zUser)%s(zTagList?",":"\051") |
| 382 | } |
| 383 | |
| @@ -398,11 +398,11 @@ | |
| 398 | while( z && z[0] ){ |
| 399 | for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){} |
| 400 | if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){ |
| 401 | blob_appendf(&links, |
| 402 | "%z%#h</a>%.2s", |
| 403 | href("%R/timeline?r=%#t&nd&c=%t",i,z,zDate), i,z, &z[i] |
| 404 | ); |
| 405 | }else{ |
| 406 | blob_appendf(&links, "%#h", i+2, z); |
| 407 | } |
| 408 | if( z[i]==0 ) break; |
| 409 |