Hi,

I found out that apparently in PGSQLKit there is an error in PQescapeStringConn 
or the way it is being used.

>From the docu I take it this is to prevent SQL injection attacks. I removed 
>any processing and it turned out the issue ceases, all works fine.

The call is here:

-(NSString *)sqlEncodeString:(NSString *)toEncode
{
    return toEncode;
        //size_t result;
        int     error;
        char *sqlEncodeCharArray = malloc(1 + ([toEncode length] * 2)); // per 
the libpq doc.
        const char *sqlCharArrayToEncode = [toEncode 
cStringUsingEncoding:defaultEncoding];
        size_t length = strlen(sqlCharArrayToEncode);
        
        PQescapeStringConn ((PGconn *)pgconn, sqlEncodeCharArray,
                        (const char *)[toEncode 
cStringUsingEncoding:defaultEncoding], 
                        length, &error);
        
        NSString *encodedString = [[[NSString alloc] 
initWithFormat:@"%s",sqlEncodeCharArray] autorelease];
        free(sqlEncodeCharArray);
        
        return encodedString;   
        
}

This indicates that the problem is in PGSQLKit and not in any settings for 
tables or the database itself. So I take it to the Cocoa list at Apple.

Thanks and regards
Alex


Am 22.03.2012 um 09:06 schrieb Alexander Reichstadt:

> Sorry, there is a copy-paste error, actually the code really is:
>> const char *cString = [sql cStringUsingEncoding:defaultEncoding];
>>      if (cString == NULL) {
> blablabla
> //This just catches cases where cString failed to encode.
> }
>>      res = PQexec(pgconn, cString);
> 
> 
> Am 22.03.2012 um 09:02 schrieb Alexander Reichstadt:
> 
>> Hi,
>> 
>> I need to be able to store special chars, German Umlaute, in my tables. This 
>> works when using pgPHPAdmin to store the same value to the same field. But 
>> when using the c-library it doesn't, fields stored are garbled.
>> 
>> I checked using \l to see what encoding the database is which is UTF8, UTF8 
>> is what's required.
>> 
>>                               List of databases
>>    Name    |  Owner   | Encoding | Collation | Ctype |   Access privileges   
>> -----------+----------+----------+-----------+-------+-----------------------
>>  MyDB   | postgres | UTF8     | C         | C     | 
>>  alltypes  | postgres | UTF8     | de_DE     | C     | 
>>  postgres  | postgres | UTF8     | C         | C     | 
>>  template0 | postgres | UTF8     | C         | C     | =c/postgres          +
>>            |          |          |           |       | postgres=CTc/postgres
>>  template1 | postgres | UTF8     | C         | C     | =c/postgres          +
>>            |          |          |           |       | postgres=CTc/postgres
>> 
>> 
>> As a way to store things I use PGSQLKit, which in turn uses 
>> 
>> const char *cString = [sql cStringUsingEncoding:defaultEncoding];
>>      if (cString == NULL) 
>>      res = PQexec(pgconn, cString);
>> 
>> 
>> 
>> to store things. The defaultEncoding I also changed explicitly from 
>> defaultEncoding to UTF8 to try, but got the same result. As far as I can see 
>> this is not an error on part of the PGSQLKit.
>> 
>> From what I read there is no table specific encoding.
>> 
>> The collation is set to C, but that's something only relevant to sorting as 
>> far s I understand.
>> 
>> So, I am at a loss as to where things go wrong.
>> 
>> 
>> 
>> Any ideas?
>> 
>> Thanks
> 

Reply via email to