@@ -389,19 +389,15 @@
389 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut = pThOut;
390 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
391 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(TH_INIT_NO_ENCODE & g.th1Flags){
392 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
encode = 0;
393 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( encode==0 && n>0 && TH1_TAINTED(n) ){
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( Th_ReportTaint(0, "output string", z, n) ){
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = TH1_LEN(n);
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
400 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( enableOutput && n ){
401 395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n<0 ){
402 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = strlen(z);
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = TH1_LEN(n);
403 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
404 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( encode ){
405 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = htmlize(z, n);
406 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = strlen(z);
407 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -534,14 +530,23 @@
534 530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pConvert,
535 531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
536 532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **argv,
537 533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *argl
538 534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int encode = *(unsigned int*)pConvert;
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n;
539 537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( argc!=2 ){
540 538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return Th_WrongNumArgs(interp, "puts STRING");
541 539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sendText(0,(char*)argv[1], argl[1], *(unsigned int*)pConvert);
540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = argl[1];
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( encode==0 && n>0 && TH1_TAINTED(n) ){
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( Th_ReportTaint(interp, "output string", argv[1], n) ){
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return TH_ERROR;
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = TH1_LEN(n);
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sendText(0,(char*)argv[1], n, encode);
543 548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_OK;
544 549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
545 550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
546 551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
547 552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** TH1 command: redirect URL ?withMethod?
@@ -3038,10 +3043,77 @@
3038 3043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as appropriate. We need to pass on g.th1Flags for the case of
3039 3044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** recursive calls, so that, e.g., TH_INIT_NO_ENCODE does not get
3040 3045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inadvertently toggled off by a recursive call.
3041 3046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/;
3042 3047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
3049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
3050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SETTING: vuln-report width=8 default=log
3051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This setting controls Fossil's behavior when it encounters a potential
3053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** XSS or SQL-injection vulnerability due to misuse of TH1 configuration
3054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** scripts. Choices are:
3055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** off Do nothing. Ignore the vulnerability.
3057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** log Write a report of the problem into the error log.
3059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** block Like "log" but also prevent the offending TH1 command
3061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from running.
3062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fatal Render an error message page instead of the requested
3064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page.
3065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
3066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
3067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
3068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Report misuse of a tainted string in TH1.
3069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The behavior depends on the vuln-report setting. If "off", this routine
3071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is a no-op. Otherwise, right a message into the error log. If
3072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** vuln-report is "log", that is all that happens. But for any other
3073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value of vuln-report, a fatal error is raised.
3074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
3075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int Th_ReportTaint(
3076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Th_Interp *interp, /* Report error here, if an error is reported */
3077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zWhere, /* Where the tainted string appears */
3078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zStr, /* The tainted string */
3079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nStr /* Length of the tainted string */
3080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
3081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zDisp; /* Dispensation */
3082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zVulnType; /* Type of vulnerability */
3083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
3084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDisp = db_get("vuln-report","log");
3085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( is_false(zDisp) ) return 0;
3086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strstr(zWhere,"SQL")!=0 ){
3087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zVulnType = "SQL-injection";
3088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
3089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zVulnType = "XSS";
3090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
3091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nStr = TH1_LEN(nStr);
3092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_errorlog("possible %s vulnerability due to tainted TH1 %s: \"%.*s\"",
3093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zVulnType, zWhere, nStr, zStr);
3094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(zDisp,"log")==0 ){
3095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
3096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
3097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(zDisp,"block")==0 ){
3098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = mprintf("tainted %s: \"", zWhere);
3099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Th_ErrorMessage(interp, z, zStr, nStr);
3100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(z);
3101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
3102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = mprintf("%#h", nStr, zStr);
3103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_reset_content();
3104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_submenu_enable(0);
3105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_set_current_feature("error");
3106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_header("Configuration Error");
3107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <p>Error in a TH1 configuration script:
3108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ tainted %h(zWhere): "%z(z)"
3109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_finish_page();
3110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_reply();
3111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_exit(1);
3112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
3113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
3114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
3043 3115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3044 3116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3045 3117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-th-render
3046 3118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3047 3119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usage: %fossil test-th-render FILE
3048 3120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!