Modify

Opened 2 months ago

Last modified 8 weeks ago

#3995 assigned Bug

Maps abort with negative integers as keys

Reported by: anonymous Owned by: Jon
Milestone: Component: AutoIt
Version: 3.3.16.1 Severity: None
Keywords: Cc:

Description

Since the first time maps got introduced, the types supported as keys were Strings and Intigers, notably both positive and negative.

Now since version 3.3.15.2, the negative ints cause a hard crash with error "Variable subscript badly formatted."

This snippet works in 3.3.15.0 and 3.3.15.1 (and likely in earlier versions too), but crashes in all versions from 3.3.15.2 to 3.3.16.1

Global $m[]
$m[12] = 'twelve'
$m['-one'] = -1
$m[-2] = 'negative two'
for $key in MapKeys($m)
  ConsoleWrite(VarGetType($key) &'->'& VarGetType($m[$key]) &' : '& $key &' = '& $m[$key] & @CRLF)
next

In the working versions it will print this:

Int64->String : 12 = twelve
String->Int32 : -one = -1
Int64->String : -2 = negative two

Attachments (0)

Change History (4)

comment:1 Changed 2 months ago by Jpm

Hi, It is by design that negative number are not allowed
You also need to take care of conversion to int using ptr or handle that will do the same
I am not so sure that Doc is clear on this point.

comment:2 Changed 2 months ago by anonymous

I humble ask you to take another, fresh look at the maps, and see if the design truly cannot be improved just a wee little bit, to allow this USEFUL types as keys!
In fact, it seems any type that can be hashed can be possible to uee as key in maps; (and of course both negative and positive ints, floats, strings, pointers/handles, all these should be elementary to hash them...)

I have an extensive UDF library written in 3.3.15.0 for a client, (that i have used also for other clients later) that uses maps with negative integers as keys (namely, $GUI_EVENT* and such; for example $GUI_EVENT_CLOSE is -3), and also with GUI/Ctrl handles; and i used Default key to represent a default value that map should return if the key is not present in it. Now it seems, i cannot use this big library in any newer versions without rewriting it; which makes the clients frustrated and potentially angry and maybe very dangerous! That's... not ideal :)

comment:3 Changed 2 months ago by Jpm

  • Owner set to Jon
  • Status changed from new to assigned

It is easy to write $map[String(...)] = ...
But I leave to jon the decision to accept negative number

comment:4 Changed 8 weeks ago by Jpm

  • Summary changed from Maps crash with negative integers as keys to Maps abort with negative integers as keys

Guidelines for posting comments:

  • You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
  • In-depth discussions should take place on the forum.

For more information see the full version of the ticket guidelines here.

Add Comment

Modify Ticket

Action
as assigned The owner will remain Jon.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.