]> granicus.if.org Git - php/commitdiff
Fixing crash in shutdown after executing a SQL statement with errors
authorFrank M. Kromann <fmk@php.net>
Thu, 31 May 2001 19:40:24 +0000 (19:40 +0000)
committerFrank M. Kromann <fmk@php.net>
Thu, 31 May 2001 19:40:24 +0000 (19:40 +0000)
ext/fbsql/php_fbsql.c

index 2d852a41835cfd4f0556ef86ac33d040dfb32f5a..40226e8a1c1bade4fc823f75f9ea6a93fcce85e9 100644 (file)
@@ -250,19 +250,6 @@ static void phpfbReleaseResult(zend_rsrc_list_entry *rsrc)
                if (result->ResultmetaData)    fbcmdRelease(result->ResultmetaData);
                if (result->list)        fbcplRelease(result->list);
                if (result->array)       fbaRelease(result->array);
-               if (result->link)
-               {
-               }
-               result->link        = 0;
-               result->fetchHandle = NULL;
-               result->metaData    = NULL;
-               result->rowHandler  = NULL;
-               result->batchSize   = 0;
-               result->rowCount    = -1;
-               result->columnIndex = 0;
-               result->row         = NULL;
-               result->array       = NULL;
-               result->list        = NULL;
                efree(result);
        }
 }
@@ -1498,8 +1485,9 @@ int mdOk(PHPFBLink* link, FBCMetaData* md)
                        else
                                php_error(E_WARNING,"No message");
                }
-               link->errorText = emg;
+               link->errorText = estrdup(emg);
                link->errorNo  = 1;
+               free(emg);
                fbcemdRelease(emd);
                result = 0;
        }
@@ -1510,7 +1498,6 @@ static int phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link)
 {
        PHPFBResult*  result = NULL;
        FBCMetaData*   md, *meta;
-       int            ok;
        char*          tp;
        char*          fh; 
        unsigned int   sR = 1, cR = 0;
@@ -1518,6 +1505,14 @@ static int phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link)
 
        meta     = fbcdcExecuteDirectSQL(link->connection, sql);
 
+       if (!mdOk(link, meta))
+       {
+               return_value->value.lval = 0;
+               return_value->type       = IS_LONG;
+               fbcmdRelease(meta);
+               return 0;
+       }
+
        if (fbcmdHasMetaDataArray(meta)) {
                sR = fbcmdMetaDataArrayCount(meta);
                md = (FBCMetaData*)fbcmdMetaDataAtIndex(meta, cR);
@@ -1525,25 +1520,22 @@ static int phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link)
        else
                md = meta;
 
-       ok     = mdOk(link, md);
        tp     = fbcmdStatementType(md);
 
-
-       if (!ok)
-       {
-               return_value->value.lval = 0;
-               return_value->type       = IS_LONG;
-       }
-       else if ((tp[0] == 'C') || (tp[0] == 'R'))
+       if ((tp[0] == 'C') || (tp[0] == 'R'))
        {
                return_value->value.lval = 1;
                return_value->type       = IS_LONG;
+               fbcmdRelease(meta);
+               return 1;
        }
        else if (tp[0] == 'I')
        {
                link->insert_id = fbcmdRowIndex(md);
                return_value->value.lval = 1;
                return_value->type       = IS_LONG;
+               fbcmdRelease(meta);
+               return 1;
        }
        else if ((fh = fbcmdFetchHandle(md)) || (tp[0] == 'E'))
        {
@@ -1583,7 +1575,6 @@ static int phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link)
                ZEND_REGISTER_RESOURCE(return_value, result, le_result);
        }
        if (link) link->affectedRows = fbcmdRowCount(md);
-       if (result == NULL) fbcmdRelease(meta);
        return 1;
 }