iCyberon / pg_hashids

Short unique id generator for PostgreSQL, using hashids
MIT License
287 stars 25 forks source link

version 1.1.3: postgres segfault when encoding with custom alphabet #21

Closed rustrust closed 4 years ago

rustrust commented 4 years ago

on an up-to-date ubuntu 16.04 LTS, using the latest postgres (12.1), and the latest pg_hashids pg_hashids with HASHIDS_VERSION "1.1.3", id_encode segfaults when using a custom alphabet.

postgres=# SHOW server_version;
          server_version          
----------------------------------
 12.1 (Ubuntu 12.1-1.pgdg18.04+1)
(1 row)

These queries work fine:

postgres=# SELECT id_encode(1001);
 id_encode 
-----------
 jNl
(1 row)

postgres=# SELECT id_encode(1234567, 'This is my salt');
 id_encode 
-----------
 Pdzxp
(1 row)

postgres=# SELECT id_encode(1234567, 'This is my salt', 8);
 id_encode 
-----------
 lRPdzxpR
(1 row)

The custom alphabet segfaults:

postgres=# SELECT id_encode(1234567, 'This is my salt', 8, 'abcdef123456789');
server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

here's the postgres log

2020-01-15 13:36:54.602 PST [31606] LOG:  server process (PID 32146) was terminated by signal 11: Segmentation fault
2020-01-15 13:36:54.602 PST [31606] DETAIL:  Failed process was running: SELECT id_encode(1234567, 'This is my salt', 8, 'abcdef123456789');
2020-01-15 13:36:54.602 PST [31606] LOG:  terminating any other active server processes
2020-01-15 13:36:54.603 PST [32132] WARNING:  terminating connection because of crash of another server process
2020-01-15 13:36:54.603 PST [32132] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
2020-01-15 13:36:54.603 PST [32132] HINT:  In a moment you should be able to reconnect to the database and repeat your command.
2020-01-15 13:36:54.605 PST [32264] postgres@postgres FATAL:  the database system is in recovery mode
2020-01-15 13:36:54.607 PST [31606] LOG:  all server processes terminated; reinitializing
2020-01-15 13:36:54.626 PST [32265] LOG:  database system was interrupted; last known up at 2020-01-15 13:32:19 PST
2020-01-15 13:36:54.665 PST [32265] LOG:  database system was not properly shut down; automatic recovery in progress
2020-01-15 13:36:54.668 PST [32265] LOG:  redo starts at 0/1662F88
2020-01-15 13:36:54.668 PST [32265] LOG:  invalid record length at 0/1662FC0: wanted 24, got 0
2020-01-15 13:36:54.668 PST [32265] LOG:  redo done at 0/1662F88
2020-01-15 13:36:54.695 PST [31606] LOG:  database system is ready to accept connections
dwagin commented 4 years ago

fixed in #22