Index: src/vdbe.c ================================================================== --- src/vdbe.c +++ src/vdbe.c @@ -1984,10 +1984,12 @@ if( affinity ){ applyAffinity(pIn1, affinity, encoding); applyAffinity(pIn3, affinity, encoding); if( db->mallocFailed ) goto no_mem; } + flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask); + flags3 = (pIn3->flags & ~MEM_TypeMask) | (flags3 & MEM_TypeMask); assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 ); ExpandBlob(pIn1); ExpandBlob(pIn3); res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl); @@ -2012,11 +2014,13 @@ if( res ){ pc = pOp->p2-1; } } /* Undo any changes made by applyAffinity() to the input registers. */ + assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) ); pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (flags1&MEM_TypeMask); + assert( (pIn3->flags & MEM_Dyn) == (flags3 & MEM_Dyn) ); pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (flags3&MEM_TypeMask); break; } /* Opcode: Permutation * * * P4 * Index: test/misc1.test ================================================================== --- test/misc1.test +++ test/misc1.test @@ -618,7 +618,13 @@ } {0} do_test misc1-19.2 { sqlite3_test_control_fault_install set fault_callbacks } {0} + +do_catchsql_test misc1-20.1 { + create table t0(o CHar(0)CHECK(0&O>O)); + insert into t0 select randomblob(0)-trim(0); +} {1 {CHECK constraint failed: t0}} + finish_test