X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/a9faac5c6333bcbfb30a00debf3de7a44e430e49..9c2d6a4ab2911db8c7ac531fe49d038df521f55b:/lisp/json.el diff --git a/lisp/json.el b/lisp/json.el index a82a1d8811..468358ccd1 100644 --- a/lisp/json.el +++ b/lisp/json.el @@ -1,9 +1,9 @@ ;;; json.el --- JavaScript Object Notation parser / generator -;; Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +;; Copyright (C) 2006-2012 Free Software Foundation, Inc. ;; Author: Edward O'Connor -;; Version: 1.2 +;; Version: 1.3 ;; Keywords: convenience ;; This file is part of GNU Emacs. @@ -47,6 +47,7 @@ ;; other cleanups, bugfixes, and improvements. ;; 2006-12-29 - XEmacs support, from Aidan Kehoe . ;; 2008-02-21 - Installed in GNU Emacs. +;; 2011-10-17 - Patch `json-alist-p' and `json-plist-p' to avoid recursion -tzz ;;; Code: @@ -108,16 +109,20 @@ this around your call to `json-read' instead of `setq'ing it.") (defun json-alist-p (list) "Non-null if and only if LIST is an alist." - (or (null list) - (and (consp (car list)) - (json-alist-p (cdr list))))) + (while (consp list) + (setq list (if (consp (car list)) + (cdr list) + 'not-alist))) + (null list)) (defun json-plist-p (list) "Non-null if and only if LIST is a plist." - (or (null list) - (and (keywordp (car list)) - (consp (cdr list)) - (json-plist-p (cddr list))))) + (while (consp list) + (setq list (if (and (keywordp (car list)) + (consp (cdr list))) + (cddr list) + 'not-plist))) + (null list)) ;; Reader utilities @@ -161,7 +166,7 @@ this around your call to `json-read' instead of `setq'ing it.") (put 'json-number-format 'error-conditions '(json-number-format json-error error)) -(put 'json-string-escape 'error-message "Bad unicode escape") +(put 'json-string-escape 'error-message "Bad Unicode escape") (put 'json-string-escape 'error-conditions '(json-string-escape json-error error))