eulerto / pgquarrel

pgquarrel compares PostgreSQL database schemas (DDL)
BSD 3-Clause "New" or "Revised" License
388 stars 42 forks source link

Segmentation fault with composite type #28

Closed Jukurrpa closed 7 years ago

Jukurrpa commented 7 years ago

Hi Euler,

First of all thanks for this tool. I'm having a segfault when running pgquarrel on a db with a composite type (at least, it seems to be related to this type).

Here's the description of the composite type:

  Composite type "public.dayweektype"
     Column      |  Type   | Modifiers 
-----------------+---------+-----------
 week            | integer | 
 day             | integer | 
 start_month     | integer | 
 end_month       | integer | 
 day_start_month | integer | 
 day_end_month   | integer | 
 nb_days         | integer | 

Here are the program logs:

DEBUG connected to server1
DEBUG server1 version: 9.5.5
DEBUG connected to server2
DEBUG server2 version: 9.5.5
DEBUG number of foreign data wrappers in server: 0
DEBUG number of foreign data wrappers in server: 0
DEBUG number of foreign servers in server: 0
DEBUG number of foreign servers in server: 0
DEBUG number of user mappings in server: 0
DEBUG number of user mappings in server: 0
DEBUG number of languages in server: 0
DEBUG number of languages in server: 0
DEBUG number of schemas in server: 1
DEBUG schema "public"
DEBUG number of schemas in server: 1
DEBUG schema "public"
DEBUG schema public: server1 server2
DEBUG number of security labels in schema "public": 0
DEBUG number of security labels in schema "public": 0
DEBUG number of extensions in server: 5
DEBUG extension "cube"
DEBUG extension "earthdistance"
DEBUG extension "pg_stat_statements"
DEBUG extension "plpgsql"
DEBUG extension "postgis"
DEBUG number of extensions in server: 2
DEBUG extension "plpgsql"
DEBUG extension "postgis"
DEBUG extension cube: server1
DEBUG extension earthdistance: server1
DEBUG extension pg_stat_statements: server1
DEBUG extension plpgsql: server1 server2
DEBUG extension postgis: server1 server2
DEBUG number of casts in server: 0
DEBUG number of casts in server: 0
DEBUG number of collations in server: 0
DEBUG number of collations in server: 0
DEBUG number of conversions in server: 0
DEBUG number of conversions in server: 0
DEBUG number of domains in server: 0
DEBUG number of domains in server: 0
DEBUG number of base types in server: 0
DEBUG number of base types in server: 0
DEBUG number of composite types in server: 1
DEBUG number of attributes on composite type "public"."dayweektype": 7
DEBUG composite type "public"."dayweektype"
DEBUG number of composite types in server: 0
DEBUG type public.dayweektype: server1
Segmentation fault (core dumped)

And here's the strack trace for the crash:

#0  0x00007ffff760f428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007ffff761102a in __GI_abort () at abort.c:89
#2  0x00007ffff76517ea in __libc_message (do_abort=do_abort@entry=2, 
    fmt=fmt@entry=0x7ffff776a2e0 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3  0x00007ffff7659e0a in malloc_printerr (ar_ptr=<optimized out>, ptr=<optimized out>, 
    str=0x7ffff77670b2 "free(): invalid pointer", action=3) at malloc.c:5004
#4  _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at malloc.c:3865
#5  0x00007ffff765d98c in __GI___libc_free (mem=<optimized out>) at malloc.c:2966
#6  0x000000000043d00e in freeCompositeTypes (t=0x6c5570, n=1) at /home/jukurrpa/Projects/pgquarrel/src/type.c:746
#7  0x0000000000426f29 in quarrelCompositeTypes () at /home/jukurrpa/Projects/pgquarrel/src/quarrel.c:2838
#8  0x0000000000427ba7 in quarrelTypes () at /home/jukurrpa/Projects/pgquarrel/src/quarrel.c:3034
#9  0x00000000004291a1 in main (argc=3, argv=0x7fffffffdd18) at /home/jukurrpa/Projects/pgquarrel/src/quarrel.c:3519

I haven't had the time to look into the code to find the potential issue, but let me know if you need any more information to find it.

eulerto commented 7 years ago

@Jukurrpa Could you test with this patch applied?

Jukurrpa commented 7 years ago

Works great, thanks!