BUG #1440: ecpg seg faults - Mailing list pgsql-bugs

From Edmund Bacon
Subject BUG #1440: ecpg seg faults
Date
Msg-id 200501241850.j0OIomme010458@developer.pgadmin.org
Whole thread Raw
Responses Re: BUG #1440: ecpg seg faults
List pgsql-bugs
The following bug has been logged online:

Bug reference:      1440
Logged by:          Edmund Bacon
Email address:      ebacon@onesystem.com
PostgreSQL version: 8.0.0
Operating system:   Linux Redhat 9 Pentium-4
Description:        ecpg seg faults
Details:

I have here a shortish source file  that produces a seg-fault from ecpg.

$ ecpg --version
ecpg (PostgreSQL 8.0.0) 3.2.0
$ cat test_bad.pgc
#include <string.h>

EXEC SQL INCLUDE sqlca;

typedef
    struct ideal_fc {
        int upc;
        char code[7];
        doube usage_x;
        int used;
    } IDEAL_FOOD_COST;

void save_ideal_adv(char *bus_date, IDEAL_FOOD_COST *Ideal, int session_id)
{
    int i, j;

    EXEC SQL TYPE SQL_IDEAL IS
        struct sql_ideal {
            int ph_id;
            double quantity;
            char code[8];
        };


    EXEC SQL BEGIN DECLARE SECTION;
        SQL_IDEAL sql_Ideal;
        char *sql_date;
    EXEC SQL END DECLARE SECTION;

    EXEC SQL SELECT prod_hist_id, quantity, code
        INTO :sql_Ideal
        FROM product_history
        JOIN products USING(upc)
        WHERE trans_key = -2 AND date(date) = date(:sql_date)
        ORDER BY code;
}

void insert_ideal(char *date, IDEAL_FOOD_COST *fc, int session_id)
{
    EXEC SQL BEGIN DECLARE SECTION;
        int upx;
        double qty;
        char *dt = date;
        int sess_id = session_id;
    EXEC SQL END DECLARE SECTION;


    EXEC SQL
        INSERT INTO product_history(date, upc, session_id, quantity,
trans_key)
        VALUES(:dt, :upx, :sess_id, :qty, -2);

}
$ ecpg test_bad.pgc
Segmentation fault (core dumped)
$

Note that the following source file, which differs only in the order of the
functions passes ecpg without error.


$ cat test_good.pgc
#include <string.h>

EXEC SQL INCLUDE sqlca;

typedef
    struct ideal_fc {
        int upc;
        char code[7];
        doube usage_x;
        int used;
    } IDEAL_FOOD_COST;


void insert_ideal(char *date, IDEAL_FOOD_COST *fc, int session_id)
{
    EXEC SQL BEGIN DECLARE SECTION;
        int upx;
        double qty;
        char *dt = date;
        int sess_id = session_id;
    EXEC SQL END DECLARE SECTION;


    EXEC SQL
        INSERT INTO product_history(date, upc, session_id, quantity,
trans_key)
        VALUES(:dt, :upx, :sess_id, :qty, -2);

}

void save_ideal_adv(char *bus_date, IDEAL_FOOD_COST *Ideal, int session_id)
{
    int i, j;

    EXEC SQL TYPE SQL_IDEAL IS
        struct sql_ideal {
            int ph_id;
            double quantity;
            char code[8];
        };


    EXEC SQL BEGIN DECLARE SECTION;

        SQL_IDEAL sql_Ideal;

        char *sql_date;
        /*int phist_id;
        double qty;
        int SESSION_ID; */

    EXEC SQL END DECLARE SECTION;

    EXEC SQL SELECT prod_hist_id, quantity, code
        INTO :sql_Ideal
        FROM product_history
        JOIN products USING(upc)
        WHERE trans_key = -2 AND date(date) = date(:sql_date)
        ORDER BY code;
}
$ ecpg test_good.pgc
$ echo $?
0


Both source files pass with ecpg v 3.1.1 (Posgtresql 7.4.2) on RedHat Linux
9 (x86), and (interstingly) withe ecpg v 3.2.0 (Postgres 8.0.) under HPUX
11i - ia64

pgsql-bugs by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Privilege escalation via LOAD
Next
From: Michael Fuhr
Date:
Subject: Re: BUG #1440: ecpg seg faults