OK, rather than implementing a roman numeral interface, are you able to try patching with these 2 diffs :
Syslog some detail from estring : --- estring-orig 2016-09-16 15:30:53.719083773 -0400 +++ estring.cpp 2016-09-16 15:31:22.560537709 -0400 @@ -8,7 +8,7 @@ #include <stdio.h> // strlen #include <string.h> - +#include <syslog.h> /*! \class EStringData estring.h @@ -437,6 +437,7 @@ void EString::appendNumber( int n, int base ) { +syslog(LOG_USER | LOG_DEBUG, "In void EString::appendNumber( int n (%d), int base (%d) )\n", n, base); if ( n < 0 ) { append( '-' ); n = -n; @@ -446,6 +447,7 @@ void EString::appendNumber( uint n, int base ) { +syslog(LOG_USER | LOG_DEBUG, "In void EString::appendNumber( uint n (%u), int base (%d) )\n", n, base); EString s( fromNumber( n, base ) ); @@ -946,6 +948,7 @@ EString EString::fromNumber( int64 n, uint base ) { +syslog(LOG_USER | LOG_DEBUG, "In void EString::fromNumber( int64 n (%lld), uint base (%u) )\n", n, base); EString r; r.appendNumber( n, base ); return r; @@ -961,6 +964,7 @@ void EString::appendNumber( int64 n, uint base ) { +syslog(LOG_USER | LOG_DEBUG, "In void EString::appendNumber( int64 n (%lld), uint base (%u) )\n", n, base); int64 top = 1; while ( top * base <= n ) top = base * top; And then to add some detail in the imap process : --- fetch-orig 2016-09-16 15:35:39.369493459 -0400 +++ fetch.cpp 2016-09-18 13:30:01.502632438 -0400 @@ -31,7 +31,7 @@ #include "map.h" #include "utf.h" - +#include <syslog.h> static const char * legalAnnotationAttributes[] = { "value", @@ -186,6 +186,9 @@ ( c->state() == Command::Blocked || c->state() == Command::Finished || c->state() == Command::Executing ) ) { +syslog(LOG_USER | LOG_DEBUG, "modseq limit inserted is %lld", limit); +EString theString = fn(limit); +syslog(LOG_USER | LOG_DEBUG, "fn( %lld ) responds with %s", limit, theString.cstr()); log( EString("Inserting flag update for modseq>") + fn( limit ) + " and UIDs " + set.set() + " before " + c->tag() + " " + c->name() ); @@ -194,6 +197,9 @@ setGroup( c->group() ); } else { +syslog(LOG_USER | LOG_DEBUG, "modseq limit appended is %lld", limit); +EString theString = fn(limit); +syslog(LOG_USER | LOG_DEBUG, "fn( %lld ) responds with %s", limit, theString.cstr()); log( "Appending flag update for modseq>" + fn( limit ) + " and UIDs " + set.set() ); i->commands()->append( this ); This will throw a fair bit of extra syslog entries, especially on a busy server; if you can do this on something handling only your problematic connection, that will be best as there will be more signal to noise. Once you capture the syslog data, I recommend putting the code back the way it was for now. Send the syslog lines from this patch (both good and bad results); I'm curious what values are behind the issue (sometimes things pop out). It will at least give something to try and reproduce with. Thanks Jim On 16/09/2016 16:56, Tom Ivar Helbekkmo wrote: > No, it seems to be exactly when my MUA asks aox for messages in a > mailbox newer than a specified message, that aox erroneously formats > that message number as 'V' in its query to pgsql. Now, if PostgreSQL > would accept Roman numerals, I guess I wouldn't see an error message... >