On Tue, Jan 23, 2007 at 09:09:52PM -0500, Tom Lane wrote:
> "James Russell" <[EMAIL PROTECTED]> writes:
> > If a text field contains a such a character, and if the search term contains
> > certain Unicode characters, then queries using ILIKE will crash the server.
> 
> I can't reproduce this with your example, so I suppose there's some
> critical bit of information you've left out.  Can you provide a stack
> trace from the crash?

This might be platform-dependent -- I get a crash with an 8.1.6
UTF-8 database on RHEL AS 4 x86_64 but not on Solaris 9/sparc 32-bit.
I don't get a crash on either platform with 8.2.1 or 8.3devel.

The crash seems to happen only with code points that have UTF-8
byte sequences of more than three bytes (U+10000 and higher).
Here's an example that segfaults in 8.1.6 on the Linux box:

select e'\360\220\200\200' ilike e'%\342\204\242';

#0  MBMatchTextIC (t=0x8ebcbc "�\220\200\200�7\212", tlen=4, p=0x0, plen=3) at 
like_match.c:195
195                                     if (ICHAREQ(t, p) || (*p == '\\') || 
(*p == '_'))
(gdb) bt
#0  MBMatchTextIC (t=0x8ebcbc "�\220\200\200�7\212", tlen=4, p=0x0, plen=3) at 
like_match.c:195
#1  0x00000000005ae558 in texticlike (fcinfo=Variable "fcinfo" is not available.
) at like.c:355
#2  0x0000000000501044 in ExecMakeFunctionResult (fcache=0x90b530, 
econtext=0x90b400, isNull=0x90bdb0 "", isDone=0x90bdd0) at execQual.c:1095
#3  0x0000000000504c23 in ExecProject (projInfo=0x90bbf0, isDone=0x7fbfffdd74) 
at execQual.c:3704
#4  0x000000000050f64a in ExecResult (node=0x90b2e8) at nodeResult.c:157
#5  0x00000000004ff90d in ExecProcNode (node=0x90b2e8) at execProcnode.c:306
#6  0x00000000004feb8a in ExecutorRun (queryDesc=Variable "queryDesc" is not 
available.
) at execMain.c:1122
#7  0x000000000058857e in PortalRunSelect (portal=0x908ae8, forward=Variable 
"forward" is not available.
) at pquery.c:794
#8  0x0000000000588b7f in PortalRun (portal=0x908ae8, 
count=9223372036854775807, dest=0x8ec510, altdest=0x8ec510, 
completionTag=0x7fbfffe0f0 "")
    at pquery.c:646
#9  0x0000000000584846 in exec_simple_query (query_string=0x8eb4e8 "select 
e'\\360\\220\\200\\200' ilike e'%\\342\\204\\242';") at postgres.c:1004
#10 0x00000000005864ee in PostgresMain (argc=4, argv=0x8844a8, 
username=0x884390 "mfuhr") at postgres.c:3232
#11 0x000000000055c31a in ServerLoop () at postmaster.c:2863
#12 0x000000000055d90a in PostmasterMain (argc=5, argv=0x8828c0) at 
postmaster.c:941
#13 0x000000000051d5e3 in main (argc=5, argv=0x8828c0) at main.c:265

-- 
Michael Fuhr

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to