сервер работающий под ALTLinux x86_64 Sisyphus. [chch@ws-chch ~]$ psql -U postgres Welcome to psql 8.3.7, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=# select lower('q'); server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. Соединение с сервером было потеряно. Попытка переустановить: Безуспешно. !> \q в логах сервера "buffer overflow" проверено на двух системах.
воспроизводится на обычном postgresql8.3-server на i586 postgresql8.3-server-8.3.7-alt3 postgresql8.3-8.3.7-alt3
на предыдущей версии все норм. видимо все сломал патч http://git.altlinux.org/people/misha/packages/?p=postgresql8.3.git;a=blob;f=0001-fix-buffer_overflow.patch;h=28a042a73272633871a686bdea38ea45698c94ca;hb=8ddddf0e5e0f271833e07a27a57662e501720692
Предполагаю, что поможет установка сборки для версии 5.0
в логах Postgres на i586 *** buffer overflow detected ***: postgres: postgres postgres [local] SELECT terminated ======= Backtrace: ========= /lib/libc.so.6(__fortify_fail+0x40)[0xb7d6afe0] /lib/libc.so.6[0xb7d69230] /lib/libc.so.6(__asprintf_chk+0x0)[0xb7d6ab60] postgres: postgres postgres [local] SELECT[0x827b635] postgres: postgres postgres [local] SELECT(upper+0xc6)[0x827b916] postgres: postgres postgres [local] SELECT(ExecMakeFunctionResult+0x325)[0x8182345]
*** buffer overflow detected ***: postgres: postgres postgres [local] SELECT terminated ======= Backtrace: ========= /lib/libc.so.6(__fortify_fail+0x40)[0xb7dccf30] /lib/libc.so.6[0xb7dcb180] /lib/libc.so.6(__asprintf_chk+0x0)[0xb7dccab0] postgres: postgres postgres [local] SELECT[0x827b6e5] postgres: postgres postgres [local] SELECT(lower+0xc6)[0x827baa6] postgres: postgres postgres [local] SELECT(ExecMakeFunctionResult+0x325)[0x81823f5] postgres: postgres postgres [local] SELECT[0x8183acc] postgres: postgres postgres [local] SELECT(ExecProject+0x1f8)[0x817f6e8] postgres: postgres postgres [local] SELECT(ExecResult+0x7b)[0x819283b] postgres: postgres postgres [local] SELECT(ExecProcNode+0x238)[0x817ea98] postgres: postgres postgres [local] SELECT(ExecutorRun+0x2ce)[0x817c6ae] postgres: postgres postgres [local] SELECT[0x82298d1] postgres: postgres postgres [local] SELECT(PortalRun+0x1d9)[0x822aea9] postgres: postgres postgres [local] SELECT[0x82253dd] postgres: postgres postgres [local] SELECT(PostgresMain+0xefb)[0x8226feb] postgres: postgres postgres [local] SELECT[0x81f4d6f] postgres: postgres postgres [local] SELECT(PostmasterMain+0xcef)[0x81f738f] postgres: postgres postgres [local] SELECT(main+0x9cc)[0x81a3f9c] /lib/libc.so.6(__libc_start_main+0xe6)[0xb7d05b26] postgres: postgres postgres [local] SELECT[0x80809d1]
При подключении к слушающему процессу через gdb /usr/bin/postmaster PID: #4 0xb7d87230 in __chk_fail () from /lib/libc.so.6 #5 0xb7d88b60 in __wcstombs_chk () from /lib/libc.so.6 #6 0x0827b635 in wcstotext (str=0x8513e60, ncodes=<value optimized out>) at /usr/include/bits/stdlib.h:151 #7 0x0827b916 in upper (fcinfo=0xbfed6208) at oracle_compat.c:442
сборка от 5.0 работает. кто виноват и что делать?-)
Там проблема со старым знакомым VARDATA(result): <------>/* Make workspace certainly large enough for result */ <------>result = (text *) palloc((ncodes + 1) * MB_CUR_MAX + VARHDRSZ); <------>/* Do the conversion */ <------>nbytes = wcstombs((char *) VARDATA(result), str, <------><------><------><------><------> (ncodes + 1) * MB_CUR_MAX); в функции wcstotext Боюсь, что это далеко не единственное место. Считаю причиной проблемы ошибку в компиляторе. Воспроизвести проблему отдельно не удалось.
Давайте что-то сделаем, например проверим на Ubuntu. Если ошибка в компиляторе, это сразу всплывёт.
есть же патч в альте, который исправляет проблему.
postgresql-8.3eter-8.3.7-alt5.src.rpm