sniper          Mon Jan 17 12:07:58 2005 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src/ext/gd     gd.c 
  Log:
  MFH: - Added some sanity checks by changing to the parameter parsing API
  
http://cvs.php.net/diff.php/php-src/ext/gd/gd.c?r1=1.221.2.53&r2=1.221.2.54&ty=u
Index: php-src/ext/gd/gd.c
diff -u php-src/ext/gd/gd.c:1.221.2.53 php-src/ext/gd/gd.c:1.221.2.54
--- php-src/ext/gd/gd.c:1.221.2.53      Mon Jan 17 11:59:23 2005
+++ php-src/ext/gd/gd.c Mon Jan 17 12:07:57 2005
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gd.c,v 1.221.2.53 2005/01/17 16:59:23 sniper Exp $ */
+/* $Id: gd.c,v 1.221.2.54 2005/01/17 17:07:57 sniper Exp $ */
 
 /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center, 
    Cold Spring Harbor Labs. */
@@ -3015,13 +3015,13 @@
  */
 static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, 
int extended)
 {
-       zval **IM, **PTSIZE, **ANGLE, **X, **Y, **C, **FONTNAME, **COL, **EXT = 
NULL;
+       zval *IM, *EXT = NULL;
        gdImagePtr im=NULL;
-       int col, x, y, l=0, i, brect[8];
+       int col = -1, x = -1, y = -1, str_len, fontname_len, i, brect[8];
        double ptsize, angle;
        unsigned char *str = NULL, *fontname = NULL;
        char *error = NULL;
-       int argc;
+       int argc = ZEND_NUM_ARGS();
 #if HAVE_GD_STRINGFTEX
        gdFTStringExtra strex = {0};
 #endif
@@ -3030,84 +3030,65 @@
        assert(!extended);
 #endif
 
-       argc = ZEND_NUM_ARGS();
-
        if (mode == TTFTEXT_BBOX) {
-               if (argc < 4 || argc > ((extended) ? 5 : 4) || 
zend_get_parameters_ex(argc, &PTSIZE, &ANGLE, &FONTNAME, &C, &EXT) == FAILURE) {
+               if (argc < 4 || argc > ((extended) ? 5 : 4)) {
                        ZEND_WRONG_PARAM_COUNT();
+               } else if (zend_parse_parameters(argc TSRMLS_CC, "ddss|a", 
&ptsize, &angle, &fontname, &fontname_len, &str, &str_len, &EXT) == FAILURE) {
+                       RETURN_FALSE;
                }
        } else {
-               if (argc < 8 || argc > ((extended) ? 9 : 8) || 
zend_get_parameters_ex(argc, &IM, &PTSIZE, &ANGLE, &X, &Y, &COL, &FONTNAME, &C, 
&EXT) == FAILURE) {
+               if (argc < 8 || argc > ((extended) ? 9 : 8)) {
                        ZEND_WRONG_PARAM_COUNT();
+               } else if (zend_parse_parameters(argc TSRMLS_CC, "rddlllss|a", 
&IM, &ptsize, &angle, &x, &y, &col, &fontname, &fontname_len, &str, &str_len, 
&EXT) == FAILURE) {
+                       RETURN_FALSE;
                }
-               ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+               ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
        }
 
-       convert_to_double_ex(PTSIZE);
-       convert_to_double_ex(ANGLE);
-       convert_to_string_ex(FONTNAME);
-       convert_to_string_ex(C);
-
-       if (mode == TTFTEXT_BBOX) {
-               im = NULL;
-               col = x = y = -1;
-       } else {
-               convert_to_long_ex(X);
-               convert_to_long_ex(Y);
-               convert_to_long_ex(COL);
-               col = Z_LVAL_PP(COL);
-               y = Z_LVAL_PP(Y);
-               x = Z_LVAL_PP(X);
-       }
+       /* convert angle to radians */
+       angle = angle * (M_PI/180);
 
 #if HAVE_GD_STRINGFTEX
-       if (extended && EXT) {
-               /* parse extended info */
-
+       if (extended && EXT) {  /* parse extended info */
                HashPosition pos;
 
-               convert_to_array_ex(EXT);
-
                /* walk the assoc array */
-               zend_hash_internal_pointer_reset_ex(HASH_OF(*EXT), &pos);
+               zend_hash_internal_pointer_reset_ex(HASH_OF(EXT), &pos);
                do {
                        zval ** item;
                        char * key;
                        ulong num_key;
 
-                       if (zend_hash_get_current_key_ex(HASH_OF(*EXT), &key, 
NULL, &num_key, 0, &pos) != HASH_KEY_IS_STRING) {
+                       if (zend_hash_get_current_key_ex(HASH_OF(EXT), &key, 
NULL, &num_key, 0, &pos) != HASH_KEY_IS_STRING) {
                                continue;
                        }
 
-                       if (zend_hash_get_current_data_ex(HASH_OF(*EXT), (void 
**) &item, &pos) == FAILURE) {
+                       if (zend_hash_get_current_data_ex(HASH_OF(EXT), (void 
**) &item, &pos) == FAILURE) {
                                continue;
                        }
-
-                       if (strcmp("linespacing", key) == 0)    {
+               
+                       if (strcmp("linespacing", key) == 0) {
                                convert_to_double_ex(item);
                                strex.flags |= gdFTEX_LINESPACE;
                                strex.linespacing = Z_DVAL_PP(item);
                        }
 
-               } while (zend_hash_move_forward_ex(HASH_OF(*EXT), &pos) == 
SUCCESS);
+               } while (zend_hash_move_forward_ex(HASH_OF(EXT), &pos) == 
SUCCESS);
        }
 #endif
 
-       ptsize = Z_DVAL_PP(PTSIZE);
-       angle = Z_DVAL_PP(ANGLE) * (M_PI / 180); /* convert to radians */
-
-       str = (unsigned char *) Z_STRVAL_PP(C);
-       l = strlen(str);
-
 #ifdef VIRTUAL_DIR
        {
                char tmp_font_path[MAXPATHLEN];
-               if (VCWD_REALPATH(Z_STRVAL_PP(FONTNAME), tmp_font_path)) {
-                       fontname = (unsigned char *) Z_STRVAL_PP(FONTNAME);
+
+               if (VCWD_REALPATH(fontname, tmp_font_path)) {
+                       fontname = (unsigned char *) fontname;
+               } else {
+                       fontname = NULL;
                }
        }
 #else
-       fontname = (unsigned char *) Z_STRVAL_PP(FONTNAME);
+       fontname = (unsigned char *) fontname;
 #endif
 
 #ifdef USE_GD_IMGSTRTTF

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to