]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-8.0'
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 16 Dec 2020 09:54:36 +0000 (10:54 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 16 Dec 2020 09:54:36 +0000 (10:54 +0100)
* PHP-8.0:
  Fixed bug #67983

1  2 
ext/mysqlnd/mysqlnd_wireprotocol.c

index d33e266b6dccae24a0f8b2ea8ad8eddc9ecdff3b,1fc2941e663e39488c216b63d446aa6d1556db3a..a0ba748a6cbee321f739a44eb0ecc6a953ed6305
@@@ -1592,7 -1604,28 +1592,26 @@@ php_mysqlnd_rowp_read_text_protocol_aux
                                }
                                MYSQLND_INC_CONN_STATISTIC_W_VALUE2(stats, statistic, 1, STAT_BYTES_RECEIVED_PURE_DATA_TEXT, len);
                        }
-                       if (as_int_or_float && perm_bind.php_type == IS_LONG) {
+                       if (fields_metadata[i].type == MYSQL_TYPE_BIT) {
+                               /*
+                                 BIT fields are specially handled. As they come as bit mask, they have
+                                 to be converted to human-readable representation.
+                               */
+                               ps_fetch_from_1_to_8_bytes(current_field, &(fields_metadata[i]), 0, (const zend_uchar **) &p, len);
+                               /*
+                                 We have advanced in ps_fetch_from_1_to_8_bytes. We should go back because
+                                 later in this function there will be an advancement.
+                               */
+                               p -= len;
+                               if (Z_TYPE_P(current_field) == IS_LONG && !as_int_or_float) {
+                                       /* we are using the text protocol, so convert to string */
+                                       char tmp[22];
+                                       const size_t tmp_len = sprintf((char *)&tmp, ZEND_ULONG_FMT, Z_LVAL_P(current_field));
+                                       ZVAL_STRINGL(current_field, tmp, tmp_len);
+                               } else if (Z_TYPE_P(current_field) == IS_STRING) {
+                                       /* nothing to do here, as we want a string and ps_fetch_from_1_to_8_bytes() has given us one */
+                               }
 -                      }
 -#ifdef MYSQLND_STRING_TO_INT_CONVERSION
 -                      else if (as_int_or_float && perm_bind.php_type == IS_LONG) {
++                      } else if (as_int_or_float && perm_bind.php_type == IS_LONG) {
                                zend_uchar save = *(p + len);
                                /* We have to make it ASCIIZ temporarily */
                                *(p + len) = '\0';
                                *(p + len) = '\0';
                                ZVAL_DOUBLE(current_field, atof((char *) p));
                                *(p + len) = save;
-                       } else if (fields_metadata[i].type == MYSQL_TYPE_BIT) {
-                               /*
-                                 BIT fields are specially handled. As they come as bit mask, they have
-                                 to be converted to human-readable representation.
-                               */
-                               ps_fetch_from_1_to_8_bytes(current_field, &(fields_metadata[i]), 0, (const zend_uchar **) &p, len);
-                               /*
-                                 We have advanced in ps_fetch_from_1_to_8_bytes. We should go back because
-                                 later in this function there will be an advancement.
-                               */
-                               p -= len;
-                               if (Z_TYPE_P(current_field) == IS_LONG && !as_int_or_float) {
-                                       /* we are using the text protocol, so convert to string */
-                                       char tmp[22];
-                                       const size_t tmp_len = sprintf((char *)&tmp, ZEND_ULONG_FMT, Z_LVAL_P(current_field));
-                                       ZVAL_STRINGL(current_field, tmp, tmp_len);
-                               } else if (Z_TYPE_P(current_field) == IS_STRING) {
-                                       /* nothing to do here, as we want a string and ps_fetch_from_1_to_8_bytes() has given us one */
-                               }
 -                      }
 -#endif /* MYSQLND_STRING_TO_INT_CONVERSION */
 -                      else {
 +                      } else {
                                ZVAL_STRINGL_FAST(current_field, (char *)p, len);
                        }
                        p += len;