Thread

  1. NOW, I SEND A PATCH ; initdb & general string compares - all Pg 6.5.2,6.5.3,snapshot,RPMS, SRPMS

    Silvio Macedo <smacedo@ic.ac.uk> — 1999-11-25T14:24:40Z

    ============================================================================
                            POSTGRESQL BUG REPORT TEMPLATE
    ============================================================================
    
    
    Your name		:	Silvio Macedo
    Your email address	: smacedo@ic.ac.uk 
    
    (or                        smacedo@inescn.pt)
    
    
    System Configuration
    ---------------------
      Architecture (example: Intel Pentium)  	: Sun Ultrasparc 1
    (143Mhz, 2.1 Gb disk, 64Mb RAM)
    
      Operating System (example: Linux 2.0.26 ELF) 	: Linux 2.2.12 ELF, (RH6.1)
    
      PostgreSQL version (example: PostgreSQL-6.5.3): PostgreSQL-6.5.3/2/SNAP
    
      Compiler used (example:  gcc 2.8.0)		: gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
    						  (comes with RH6.1)
    						  GNUlibc 2.1.2
    
    
    Please enter a FULL description of your problem:
    ------------------------------------------------
    
    In 64 bit machines like the Ultraparc, strncmp can return -256.
    In src/backend/utils/adt/name.c you do:
    	        return (bool) strncmp(arg1->data, arg2->data, NAMEDATALEN) == 0;
    
    In this way you are casting strncmp to bool, and not the comparison.
    
    This is the description of the consequences, that I sent before I
    discovered the problem:
    (I am giving a really detailed description to maximize the chances that
    you find the solution to my problem)
    
    I have installed postgres many times in several Linux/Intel systems.
    
    Now, I am trying to install Pg 6.5.3 ( or any other version of Pg) in a
    Linux/(ultra)Sparc system. The system seems stable in any task other than
    postgres stuff, but when I run initdb, it always dies with and error
    about :
    "Attribute 'aggtransfn1' is repeated."
    
    I have downloaded source distribution PG 6.5.3, PG Snapshot, PG 6.5.2
    and RPM binaries of Pg from RedHat 6.1 distribution and even SRPMS.
    
    In all of them, after compiling and/or installing, when I do the initdb
    -d, the script dies with this message:
    
    > <aggname name>
    <aggowner int4>
    <aggtransfn1 regproc>
    <aggtransfn2 regproc>
    <aggfinalfn regproc>
    <aggbasetype oid>
    <aggtranstype1 oid>
    <aggtranstype2 oid>
    <aggfinaltype oid>
    <agginitval1 text>
    <agginitval2 text>
    > ERROR:  Attribute 'aggtransfn1' is repeated
    ERROR:  Attribute 'aggtransfn1' is repeated
    initdb: could not create template database
    initdb: cleaning up by wiping out /usr/local/pgsql/data/base/template1
    
    I have also tried initdb with the full command line, etc..
    
    This happens with all the versions of Pg that I have tested:
    Pg Snapshot 22 Nov
    Pg 6.5.3, 
    Pg 6.5.2,
    Binaries in RPM from RedHat 6.1 Sparc
    Source SRPM from '' ''
    
    
    Then, I investigated the problem deeper, and deeper.
    If I remove aggtransfn2 from the local1.????.bki.source, it gives the same
    error in agginitval2. 
    
    I replaced the ERROR with a NOTICE on the elog on the file
    src/backend/catalog/heap.c in the function CheckAttributeNames() and
    everything went ok until I started regression tests. Lots of 'failed'
    appeared in the char/string related tests, and those were real problems,
    because I checked it myself (not just little differences); the backend 
    closed connection in some tests.
    
     I then added some lines in the src/backend/catalog/heap.c to see if the
    strings were read ok and if NAMEDATALEN was ok. Yes, they were.
    aggtransfn1 was compared to aggransfn2 by a call to nameeq(), and this
    function returned that they were equal (obviously they differ on the last
    character).
    
    Then, finally I replaced the call to nameeq to a direct strncmp() between
    both tuple->data's and it worked. The regression tests still failed.
    
    Maybe there is a problem in the strncmp libraries in my system ? oh no...
    
    [PS: The source of this problem as I wrote above, is in Postgres name.c
    file, in nameeq() ]
    
    Please describe a way to repeat the problem.   Please try to provide a
    concise reproducible example, if at all possible: 
    ----------------------------------------------------------------------
    
    configure --with-x --with-tcl --with-template=linux_sparc
    make
    make install
    cd /usr/local/pgsql
    initdb
    
    
    
    
    If you know how this problem might be fixed, list the solution below:
    ---------------------------------------------------------------------
    I send both diff -f and diff -u in attach
    
    --- postgresql-6.5.3/src/backend/utils/adt/name.c	Mon Aug  2 06:24:55 1999
    +++ postgresql-6.5.3.my/src/backend/utils/adt/name.c	Thu Nov 25 11:53:39 1999
    @@ -87,7 +87,7 @@
     	if (!arg1 || !arg2)
     		return 0;
     	else
    -		return (bool) strncmp(arg1->data, arg2->data, NAMEDATALEN) == 0;
    +	        return (bool) (strncmp(arg1->data, arg2->data, NAMEDATALEN) == 0);
     }
     
     bool
    
    ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    ``````````````````````````````````````````````````````````````````````````
    Silvio Emanuel Nunes Barbosa de Macedo
    
    smacedo@ic.ac.uk                                         smacedo@inescn.pt
    Imperial College, University of London                         INESC Porto 
    Intelligent and Interactive Systems                Telecom. and Multimedia
    Exhibition Road,                                       Pc da Republica, 93
    London SW7 2AZ, England                            4050-497 PORTO PORTUGAL
    Tel:+44 171 5946323                                    Tel:+351 22 2094220