|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patch hex2bin_padd_odd_new_patch for *General Issues Bug #61660Patch version 2012-04-08 09:18 UTC Return to Bug #61660 | Download this patchThis patch renders other patches obsolete Obsolete patches: Patch Revisions:Developer: theanomaly.is@gmail.com
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 0aade78..a42e91a 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -151,32 +151,40 @@ static char *php_bin2hex(const unsigned char *old, const siz
static char *php_hex2bin(const unsigned char *old, const size_t oldlen, size_t *n
{
size_t target_length = oldlen >> 1;
- register unsigned char *str = (unsigned char *)safe_emalloc(target_length,
- size_t i, j;
- for (i = j = 0; i < target_length; i++) {
- char c = old[j++];
- if (c >= '0' && c <= '9') {
- str[i] = (c - '0') << 4;
- } else if (c >= 'a' && c <= 'f') {
- str[i] = (c - 'a' + 10) << 4;
- } else if (c >= 'A' && c <= 'F') {
- str[i] = (c - 'A' + 10) << 4;
- } else {
- efree(str);
- return NULL;
- }
- c = old[j++];
- if (c >= '0' && c <= '9') {
:
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 0aade78..a42e91a 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -151,32 +151,40 @@ static char *php_bin2hex(const unsigned char *old, const size_t oldlen, size_t *
static char *php_hex2bin(const unsigned char *old, const size_t oldlen, size_t *newlen)
{
size_t target_length = oldlen >> 1;
- register unsigned char *str = (unsigned char *)safe_emalloc(target_length, sizeof(char), 1);
- size_t i, j;
- for (i = j = 0; i < target_length; i++) {
- char c = old[j++];
- if (c >= '0' && c <= '9') {
- str[i] = (c - '0') << 4;
- } else if (c >= 'a' && c <= 'f') {
- str[i] = (c - 'a' + 10) << 4;
- } else if (c >= 'A' && c <= 'F') {
- str[i] = (c - 'A' + 10) << 4;
- } else {
- efree(str);
- return NULL;
- }
- c = old[j++];
- if (c >= '0' && c <= '9') {
- str[i] |= c - '0';
- } else if (c >= 'a' && c <= 'f') {
- str[i] |= c - 'a' + 10;
- } else if (c >= 'A' && c <= 'F') {
- str[i] |= c - 'A' + 10;
+ if (oldlen % 2) {
+ target_length++;
+ }
+ register unsigned char *str = (unsigned char *)safe_emalloc(target_length, sizeof(char), 1);
+ size_t i, j;
+ for (i = j = 0; i < target_length; i++) {
+ char c = '0';
+ if (j == 0 && oldlen % 2) {
+ c = '0';
} else {
:
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 0aade78..a42e91a 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -151,32 +151,40 @@ static char *php_bin2hex(const unsigned char *old, const size_t oldlen, size_t *
static char *php_hex2bin(const unsigned char *old, const size_t oldlen, size_t *newlen)
{
size_t target_length = oldlen >> 1;
- register unsigned char *str = (unsigned char *)safe_emalloc(target_length, sizeof(char), 1);
- size_t i, j;
- for (i = j = 0; i < target_length; i++) {
- char c = old[j++];
- if (c >= '0' && c <= '9') {
- str[i] = (c - '0') << 4;
- } else if (c >= 'a' && c <= 'f') {
- str[i] = (c - 'a' + 10) << 4;
- } else if (c >= 'A' && c <= 'F') {
- str[i] = (c - 'A' + 10) << 4;
- } else {
- efree(str);
- return NULL;
- }
- c = old[j++];
- if (c >= '0' && c <= '9') {
- str[i] |= c - '0';
- } else if (c >= 'a' && c <= 'f') {
- str[i] |= c - 'a' + 10;
- } else if (c >= 'A' && c <= 'F') {
- str[i] |= c - 'A' + 10;
+ if (oldlen % 2) {
+ target_length++;
+ }
+ register unsigned char *str = (unsigned char *)safe_emalloc(target_length, sizeof(char), 1);
+ size_t i, j;
+ for (i = j = 0; i < target_length; i++) {
+ char c = '0';
+ if (j == 0 && oldlen % 2) {
+ c = '0';
} else {
- efree(str);
|
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 09:00:02 2025 UTC |