Patch 7.3.1045
Problem:    Python: No error handling for VimToPython function.
Solution:   Python patch 6. (ZyX)
Files:      src/if_py_both.h


*** ../vim-7.3.1044/src/if_py_both.h    2013-05-29 22:15:26.000000000 +0200
--- src/if_py_both.h    2013-05-29 22:17:56.000000000 +0200
***************
*** 432,439 ****
        sprintf(ptrBuf, "%p",
                our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
                                           : (void *)our_tv->vval.v_dict);
!       result = PyDict_GetItemString(lookupDict, ptrBuf);
!       if (result != NULL)
        {
            Py_INCREF(result);
            return result;
--- 432,439 ----
        sprintf(ptrBuf, "%p",
                our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
                                           : (void *)our_tv->vval.v_dict);
! 
!       if ((result = PyDict_GetItemString(lookupDict, ptrBuf)))
        {
            Py_INCREF(result);
            return result;
***************
*** 467,510 ****
        list_T          *list = our_tv->vval.v_list;
        listitem_T      *curr;
  
!       result = PyList_New(0);
  
!       if (list != NULL)
        {
!           PyDict_SetItemString(lookupDict, ptrBuf, result);
  
!           for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
            {
-               newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict);
-               PyList_Append(result, newObj);
                Py_DECREF(newObj);
            }
        }
      }
      else if (our_tv->v_type == VAR_DICT)
      {
-       result = PyDict_New();
  
!       if (our_tv->vval.v_dict != NULL)
!       {
!           hashtab_T   *ht = &our_tv->vval.v_dict->dv_hashtab;
!           long_u      todo = ht->ht_used;
!           hashitem_T  *hi;
!           dictitem_T  *di;
  
!           PyDict_SetItemString(lookupDict, ptrBuf, result);
  
!           for (hi = ht->ht_array; todo > 0; ++hi)
            {
!               if (!HASHITEM_EMPTY(hi))
!               {
!                   --todo;
  
!                   di = dict_lookup(hi);
!                   newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
!                   PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
                    Py_DECREF(newObj);
                }
            }
        }
      }
--- 467,538 ----
        list_T          *list = our_tv->vval.v_list;
        listitem_T      *curr;
  
!       if (list == NULL)
!           return NULL;
! 
!       if (!(result = PyList_New(0)))
!           return NULL;
  
!       if (PyDict_SetItemString(lookupDict, ptrBuf, result))
        {
!           Py_DECREF(result);
!           return NULL;
!       }
  
!       for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
!       {
!           if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict)))
!           {
!               Py_DECREF(result);
!               return NULL;
!           }
!           if (PyList_Append(result, newObj))
            {
                Py_DECREF(newObj);
+               Py_DECREF(result);
+               return NULL;
            }
+           Py_DECREF(newObj);
        }
      }
      else if (our_tv->v_type == VAR_DICT)
      {
  
!       hashtab_T       *ht = &our_tv->vval.v_dict->dv_hashtab;
!       long_u  todo = ht->ht_used;
!       hashitem_T      *hi;
!       dictitem_T      *di;
!       if (our_tv->vval.v_dict == NULL)
!           return NULL;
! 
!       if (!(result = PyDict_New()))
!           return NULL;
  
!       if (PyDict_SetItemString(lookupDict, ptrBuf, result))
!       {
!           Py_DECREF(result);
!           return NULL;
!       }
  
!       for (hi = ht->ht_array; todo > 0; ++hi)
!       {
!           if (!HASHITEM_EMPTY(hi))
            {
!               --todo;
  
!               di = dict_lookup(hi);
!               if (!(newObj = VimToPython(&di->di_tv, depth + 1, lookupDict)))
!               {
!                   Py_DECREF(result);
!                   return NULL;
!               }
!               if (PyDict_SetItemString(result, (char *)hi->hi_key, newObj))
!               {
!                   Py_DECREF(result);
                    Py_DECREF(newObj);
+                   return NULL;
                }
+               Py_DECREF(newObj);
            }
        }
      }
*** ../vim-7.3.1044/src/version.c       2013-05-29 22:15:26.000000000 +0200
--- src/version.c       2013-05-29 22:17:30.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1045,
  /**/

-- 
Shift happens.
                -- Doppler

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui