sqlHexDecode fully hex decode

This commit is contained in:
brenosilva 2011-10-26 22:31:23 +00:00
parent 9cbc44eea8
commit 3090edd850

View File

@ -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);
} }
/** /**