mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-17 14:46:13 +03:00
sqlHexDecode fully hex decode
This commit is contained in:
parent
9cbc44eea8
commit
3090edd850
@ -420,39 +420,33 @@ char *file_dirname(apr_pool_t *p, const char *filename) {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
int sql_hex2bytes_inplace(unsigned char *data, int len) {
|
int sql_hex2bytes_inplace(unsigned char *data, int len) {
|
||||||
unsigned char *d = data;
|
unsigned char *d, *begin = data;
|
||||||
char print = 0, found = 0;
|
|
||||||
int i, count = 0;
|
|
||||||
|
|
||||||
if ((data == NULL)||(len == 0)) return 0;
|
if ((data == NULL)||(len == 0)) return 0;
|
||||||
|
|
||||||
for(i = 0; i <= len - 1; i++) {
|
for( d = data; *data; *d++ = *data++) {
|
||||||
if(data[i] == 0x30 && (data[i+1] == 0x78 || data[i+1] == 0x58)) {
|
if ( *data != '0' ) continue;
|
||||||
found = 1;
|
if ( tolower(*++data) != 'x' ) {
|
||||||
i++; continue;
|
data--;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(VALID_HEX(data[i]) && VALID_HEX(data[i+1]) && found) {
|
data++;
|
||||||
print = data[i];
|
|
||||||
if(print > 0x31 && print < 0x38) {
|
// Do we need to keep "0x" if no hexa after?
|
||||||
*d++ = x2c(&data[i]);
|
if ( !VALID_HEX(data[0]) || !VALID_HEX(data[1]) ) {
|
||||||
i++;
|
data-=2;
|
||||||
} else {
|
continue;
|
||||||
*d++ = data[i];
|
|
||||||
*d++ = data[i+1];
|
|
||||||
i++;
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
*d++ = data[i];
|
|
||||||
found = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
count++;
|
while ( VALID_HEX(data[0]) && VALID_HEX(data[1]) ) {
|
||||||
|
*d++ = x2c(data);
|
||||||
|
data += 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*d = '\0';
|
|
||||||
|
|
||||||
return count;
|
*d = '\0';
|
||||||
|
return strlen(begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user