Fossil SCM

New security feature: Reject any query parameter, POST parameter, or cookie whose name contains a non-alphanumeric character.

drh 2018-03-29 15:16 trunk
Commit be5d83f93ac66f6553a874704dd2f6c439cf6aa7b78f29d0fa591177399ca233
2 files changed +8 +1 -1
+8
--- src/blob.c
+++ src/blob.c
@@ -114,10 +114,18 @@
114114
return (c>='a' && c<='z') || (c>='A' && c<='Z');
115115
}
116116
int fossil_isalnum(char c){
117117
return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9');
118118
}
119
+
120
+/* Return true if and only if the entire string consists of only
121
+** alphanumeric characters.
122
+*/
123
+int fossil_all_alnum(const char *z){
124
+ while( z && fossil_isalnum(z[0]) ) z++;
125
+ return z[0]==0;
126
+}
119127
120128
121129
/*
122130
** COMMAND: test-isspace
123131
**
124132
--- src/blob.c
+++ src/blob.c
@@ -114,10 +114,18 @@
114 return (c>='a' && c<='z') || (c>='A' && c<='Z');
115 }
116 int fossil_isalnum(char c){
117 return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9');
118 }
 
 
 
 
 
 
 
 
119
120
121 /*
122 ** COMMAND: test-isspace
123 **
124
--- src/blob.c
+++ src/blob.c
@@ -114,10 +114,18 @@
114 return (c>='a' && c<='z') || (c>='A' && c<='Z');
115 }
116 int fossil_isalnum(char c){
117 return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9');
118 }
119
120 /* Return true if and only if the entire string consists of only
121 ** alphanumeric characters.
122 */
123 int fossil_all_alnum(const char *z){
124 while( z && fossil_isalnum(z[0]) ) z++;
125 return z[0]==0;
126 }
127
128
129 /*
130 ** COMMAND: test-isspace
131 **
132
+1 -1
--- src/cgi.c
+++ src/cgi.c
@@ -585,11 +585,11 @@
585585
dehttpize(zValue);
586586
}else{
587587
if( *z ){ *z++ = 0; }
588588
zValue = "";
589589
}
590
- if( fossil_islower(zName[0]) ){
590
+ if( fossil_islower(zName[0]) && fossil_all_alnum(zName+1) ){
591591
cgi_set_parameter_nocopy(zName, zValue, isQP);
592592
}
593593
#ifdef FOSSIL_ENABLE_JSON
594594
json_setenv( zName, cson_value_new_string(zValue,strlen(zValue)) );
595595
#endif /* FOSSIL_ENABLE_JSON */
596596
--- src/cgi.c
+++ src/cgi.c
@@ -585,11 +585,11 @@
585 dehttpize(zValue);
586 }else{
587 if( *z ){ *z++ = 0; }
588 zValue = "";
589 }
590 if( fossil_islower(zName[0]) ){
591 cgi_set_parameter_nocopy(zName, zValue, isQP);
592 }
593 #ifdef FOSSIL_ENABLE_JSON
594 json_setenv( zName, cson_value_new_string(zValue,strlen(zValue)) );
595 #endif /* FOSSIL_ENABLE_JSON */
596
--- src/cgi.c
+++ src/cgi.c
@@ -585,11 +585,11 @@
585 dehttpize(zValue);
586 }else{
587 if( *z ){ *z++ = 0; }
588 zValue = "";
589 }
590 if( fossil_islower(zName[0]) && fossil_all_alnum(zName+1) ){
591 cgi_set_parameter_nocopy(zName, zValue, isQP);
592 }
593 #ifdef FOSSIL_ENABLE_JSON
594 json_setenv( zName, cson_value_new_string(zValue,strlen(zValue)) );
595 #endif /* FOSSIL_ENABLE_JSON */
596

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button