@@ -59,11 +59,12 @@ def literal_eval(node_or_string):
5959 node_or_string  =  parse (node_or_string , mode = 'eval' )
6060 if  isinstance (node_or_string , Expression ):
6161 node_or_string  =  node_or_string .body 
62+  def  _raise_malformed_node (node ):
63+  raise  ValueError (f'malformed node or string: { node !r}  )
6264 def  _convert_num (node ):
63-  if  isinstance (node , Constant ):
64-  if  type (node .value ) in  (int , float , complex ):
65-  return  node .value 
66-  raise  ValueError ('malformed node or string: '  +  repr (node ))
65+  if  not  isinstance (node , Constant ) or  type (node .value ) not  in int , float , complex ):
66+  _raise_malformed_node (node )
67+  return  node .value 
6768 def  _convert_signed_num (node ):
6869 if  isinstance (node , UnaryOp ) and  isinstance (node .op , (UAdd , USub )):
6970 operand  =  _convert_num (node .operand )
@@ -82,6 +83,8 @@ def _convert(node):
8283 elif  isinstance (node , Set ):
8384 return  set (map (_convert , node .elts ))
8485 elif  isinstance (node , Dict ):
86+  if  len (node .keys ) !=  len (node .values ):
87+  _raise_malformed_node (node )
8588 return  dict (zip (map (_convert , node .keys ),
8689 map (_convert , node .values )))
8790 elif  isinstance (node , BinOp ) and  isinstance (node .op , (Add , Sub )):
0 commit comments