Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 4F32064FCF3 for ; Tue, 9 Sep 2008 09:46:24 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 92401-01 for ; Tue, 9 Sep 2008 09:46:20 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from ti-out-0910.google.com (ti-out-0910.google.com [209.85.142.186]) by postgresql.org (Postfix) with ESMTP id 7AEFB64FCE2 for ; Tue, 9 Sep 2008 09:46:19 -0300 (ADT) Received: by ti-out-0910.google.com with SMTP id y8so1258815tia.5 for ; Tue, 09 Sep 2008 05:46:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type:references; bh=p2ZemWfRDXZYraSlIXhZTBSquVlyL4wzkQ7YaCwx+Ts=; b=hx6M43jsvlGYpeP3L+e8z9tafMG08rpiJz2smAke+ZybOBGoG/UPYpXrH+VXneVbzD G1oxPyOqYBblaNZAZtHEaq33PyDXOsBwlCrI/r5lLP7Z7rDpMWJ38dsbcvGUXLFuZdqw QqsQnacnpo2t5LhaWijM6G8SCsOJT59nhJ35g= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:references; b=n78zOiLbf+ulSTkPIJWQRiFACr1DbIliDvlo1FTgeKBt3Qis5ATkhZoJJZBCxCYuE0 fgrQiVMarjfd52V10xKy105lJ2aOQ1wOCWW/GEh0k1FGXUCcRM9f5I0K0DlahNkvxlow GVeLBBscO2MDYmqrxgwJ181K4vuHkzN7LNhJQ= Received: by 10.110.7.18 with SMTP id 18mr21915305tig.39.1220964376709; Tue, 09 Sep 2008 05:46:16 -0700 (PDT) Received: by 10.110.10.2 with HTTP; Tue, 9 Sep 2008 05:46:16 -0700 (PDT) Message-ID: <37ed240d0809090546v3024a465j33216e8157bc54ca@mail.gmail.com> Date: Tue, 9 Sep 2008 22:46:16 +1000 From: "Brendan Jurd" To: "Martijn van Oosterhout" Subject: Re: [PATCHES] to_date() validation Cc: "Alex Hunsaker" , pgsql-hackers@postgresql.org In-Reply-To: <37ed240d0809090404w2490d375l60b0fc972f899cec@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_193028_30711977.1220964376694" References: <37ed240d0808291839t21e19956mdfbdc80aeb1b3c19@mail.gmail.com> <34d269d40809061258t46f90218r3152814dd18880ab@mail.gmail.com> <37ed240d0809080124y3403224fpe3c34ca90df798a3@mail.gmail.com> <20080909092919.GB29604@svana.org> <37ed240d0809090404w2490d375l60b0fc972f899cec@mail.gmail.com> X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200809/614 X-Sequence-Number: 123743 ------=_Part_193028_30711977.1220964376694 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Tue, Sep 9, 2008 at 9:04 PM, Brendan Jurd wrote: > On Tue, Sep 9, 2008 at 7:29 PM, Martijn van Oosterhout > wrote: >> The use of palloc/pfree in this routine seems excessive. Does len have >> upper bound? If so a simple array will do it. >> > > I suppose I could define a constant FORMATNODE_MAX_LEN, make it > something like 10 and just use that for copying the string, rather > than palloc(). I'll give it a try. > Turns out there was already a relevant constant defined in formatting.c: DCH_MAX_ITEM_SIZ, set to 9. So I just used that, +1 for the trailing null. >> >> Here you do not note if we didn't convert the entire string. So it >> seems you are allowed to provide too few characters, as long as it's >> not the last field? > > That's true. The only way to hit that condition would be to provide a > semi-bogus value in a string with no separators between the numbers. I've now plugged this hole. I added the following error for fixed-width inputs that are too short: postgres=# SELECT to_date('200%1010', 'YYYYMMDD'); ERROR: invalid value for "YYYY" in source string DETAIL: Field requires 4 characters, but only 3 could be parsed. HINT: If your source string is not fixed-width, try using the "FM" modifier. I've attached a new version of the patch (version 3), as well as an incremental patch to show the differences between versions 2 and 3. Cheers, BJ ------=_Part_193028_30711977.1220964376694 Content-Type: application/x-gzip; name=to-date-validation-3.diff.gz Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkwiq2mj0 Content-Disposition: attachment; filename=to-date-validation-3.diff.gz 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 NHq2bmjs3CjIXJr/BwT14z1uvQAA ------=_Part_193028_30711977.1220964376694 Content-Type: application/octet-stream; name=to-date-validation-2-to-3.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkwiqcsj1 Content-Disposition: attachment; filename=to-date-validation-2-to-3.diff KioqIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKLS0tIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9mb3JtYXR0aW5nLmMKKioqKioqKioqKioqKioqCioqKiAxNjc5LDE2ODUgKioqKiBp c19uZXh0X3NlcGFyYXRvcihGb3JtYXROb2RlICpuKQogIAluKys7CiAgCiAgCWlmIChuLT50eXBl ID09IE5PREVfVFlQRV9FTkQpCiEgCQlyZXR1cm4gVFJVRTsKICAKICAJaWYgKG4tPnR5cGUgPT0g Tk9ERV9UWVBFX0FDVElPTikKICAJewotLS0gMTY3OSwxNjg1IC0tLS0KICAJbisrOwogIAogIAlp ZiAobi0+dHlwZSA9PSBOT0RFX1RZUEVfRU5EKQohIAkJcmV0dXJuIEZBTFNFOwogIAogIAlpZiAo bi0+dHlwZSA9PSBOT0RFX1RZUEVfQUNUSU9OKQogIAl7CioqKioqKioqKioqKioqKgoqKiogMTgx MSwxODIwICoqKiogZnJvbV9jaGFyX3BhcnNlX2ludF9sZW4oaW50ICpkZXN0LCBjaGFyICoqc3Jj LCBjb25zdCBpbnQgbGVuLCBGb3JtYXROb2RlICpub2RlKQogIAkJICogV2UgbmVlZCB0byBwdWxs IGV4YWN0bHkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGdpdmVuIGluICdsZW4nIG91dAogIAkJ ICogb2YgdGhlIHN0cmluZywgYW5kIGNvbnZlcnQgdGhvc2UuCiAgCQkgKi8KISAJCWNoYXIgKmZp cnN0OwogIAkJY2hhciAqbGFzdDsKICAKLSAJCWZpcnN0ID0gcGFsbG9jKGxlbiArIDEpOwogIAkJ c3RybmNweShmaXJzdCwgaW5pdCwgbGVuKTsKICAJCWZpcnN0W2xlbl0gPSAnXDAnOwogIAotLS0g MTgxMSwxODIwIC0tLS0KICAJCSAqIFdlIG5lZWQgdG8gcHVsbCBleGFjdGx5IHRoZSBudW1iZXIg b2YgY2hhcmFjdGVycyBnaXZlbiBpbiAnbGVuJyBvdXQKICAJCSAqIG9mIHRoZSBzdHJpbmcsIGFu ZCBjb252ZXJ0IHRob3NlLgogIAkJICovCiEgCQljaGFyIGZpcnN0W0RDSF9NQVhfSVRFTV9TSVog KyAxXTsKICAJCWNoYXIgKmxhc3Q7CisgCQlpbnQgdXNlZDsKICAKICAJCXN0cm5jcHkoZmlyc3Qs IGluaXQsIGxlbik7CiAgCQlmaXJzdFtsZW5dID0gJ1wwJzsKICAKKioqKioqKioqKioqKioqCioq KiAxODMwLDE4MzggKioqKiBmcm9tX2NoYXJfcGFyc2VfaW50X2xlbihpbnQgKmRlc3QsIGNoYXIg KipzcmMsIGNvbnN0IGludCBsZW4sIEZvcm1hdE5vZGUgKm5vZGUpCiAgCQkJCQkJCSAidXNpbmcg dGhlIFwiRk1cIiBtb2RpZmllci4iKSkpOwogIAogIAkJcmVzdWx0ID0gc3RydG9sKGZpcnN0LCAm bGFzdCwgMTApOwohIAkJKnNyYyArPSAobGFzdCAtIGZpcnN0KTsKICAKISAJCXBmcmVlKGZpcnN0 KTsKICAJfQogIAogIAlpZiAocmVzdWx0ID09IDAgJiYgKnNyYyA9PSBpbml0KQotLS0gMTgzMCwx ODQ4IC0tLS0KICAJCQkJCQkJICJ1c2luZyB0aGUgXCJGTVwiIG1vZGlmaWVyLiIpKSk7CiAgCiAg CQlyZXN1bHQgPSBzdHJ0b2woZmlyc3QsICZsYXN0LCAxMCk7CiEgCQl1c2VkID0gbGFzdCAtIGZp cnN0OwohIAohIAkJaWYgKHVzZWQgPiAwICYmIHVzZWQgPCBsZW4pCiEgCQkJZXJlcG9ydChFUlJP UiwKISAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9EQVRFVElNRV9GT1JNQVQpLAohIAkJ CQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3IgXCIlc1wiIGluIHNvdXJjZSBzdHJpbmciLCAK ISAJCQkJCQkgCW5vZGUtPmtleS0+bmFtZSksCiEgCQkJCQkgZXJyZGV0YWlsKCJGaWVsZCByZXF1 aXJlcyAlZCBjaGFyYWN0ZXJzLCBidXQgb25seSAlZCAiCiEgCQkJCQkJIAkgICAiY291bGQgYmUg cGFyc2VkLiIsIGxlbiwgdXNlZCksCiEgCQkJCQkgZXJyaGludCgiSWYgeW91ciBzb3VyY2Ugc3Ry aW5nIGlzIG5vdCBmaXhlZC13aWR0aCwgdHJ5ICIKISAJCQkJCQkgCSAidXNpbmcgdGhlIFwiRk1c IiBtb2RpZmllci4iKSkpOwogIAohIAkJKnNyYyArPSB1c2VkOwogIAl9CiAgCiAgCWlmIChyZXN1 bHQgPT0gMCAmJiAqc3JjID09IGluaXQpCioqKiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Rp bWVzdGFtcC5vdXQKLS0tIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGltZXN0YW1wLm91dAoq KioqKioqKioqKioqKioKKioqIDE3MjksMTc0NCAqKioqIFNFTEVDVCAnJyBBUyB0b190aW1lc3Rh bXBfMjMsIHRvX3RpbWVzdGFtcCgnMTk5NzEnLCAnWVlZWU1NREQnKTsKICBFUlJPUjogIHNvdXJj ZSBzdHJpbmcgdG9vIHNob3J0IGZvciAiTU0iIGZvcm1hdHRpbmcgZmllbGQKICBERVRBSUw6ICBG aWVsZCByZXF1aXJlcyAyIGNoYXJhY3RlcnMsIGJ1dCBvbmx5IDEgcmVtYWluLgogIEhJTlQ6ICBJ ZiB5b3VyIHNvdXJjZSBzdHJpbmcgaXMgbm90IGZpeGVkLXdpZHRoLCB0cnkgdXNpbmcgdGhlICJG TSIgbW9kaWZpZXIuCiAgLS0gVmFsdWUgY2xvYmJlcmluZzoKISBTRUxFQ1QgJycgQVMgdG9fdGlt ZXN0YW1wXzI0LCB0b190aW1lc3RhbXAoJzE5OTctMTEtSmFuLTE2JywgJ1lZWVktTU0tTW9uLURE Jyk7CiAgRVJST1I6ICBjb25mbGljdGluZyB2YWx1ZSBmb3IgIk1vbiIgZmllbGQgaW4gZm9ybWF0 dGluZyBzdHJpbmcKICBERVRBSUw6ICBUaGlzIHZhbHVlIGNvbnRyYWRpY3RzIGEgcHJldmlvdXMg c2V0dGluZyBmb3IgdGhlIHNhbWUgZmllbGQgdHlwZS4KICAtLSBOb24tbnVtZXJpYyBpbnB1dDoK ISBTRUxFQ1QgJycgQVMgdG9fdGltZXN0YW1wXzI0LCB0b190aW1lc3RhbXAoJzE5OTcxMXh5Jywg J1lZWVlNTUREJyk7CiAgRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciAiREQiIGluIHNvdXJjZSBz dHJpbmcKICBERVRBSUw6ICBWYWx1ZSBtdXN0IGJlIGFuIGludGVnZXIuCiAgLS0gSW5wdXQgdGhh dCBkb2Vzbid0IGZpdCBpbiBhbiBpbnQ6CiEgU0VMRUNUICcnIEFTIHRvX3RpbWVzdGFtcF8yNCwg dG9fdGltZXN0YW1wKCcxMDAwMDAwMDAwMCcsICdZWVlZJyk7CiAgRVJST1I6ICB2YWx1ZSBmb3Ig IllZWVkiIGluIHNvdXJjZSBzdHJpbmcgaXMgb3V0IG9mIHJhbmdlCiAgREVUQUlMOiAgVmFsdWUg bXVzdCBiZSBpbiB0aGUgcmFuZ2UgLTIxNDc0ODM2NDggdG8gMjE0NzQ4MzY0Ny4KICBTRVQgRGF0 ZVN0eWxlIFRPIERFRkFVTFQ7Ci0tLSAxNzI5LDE3NDkgLS0tLQogIEVSUk9SOiAgc291cmNlIHN0 cmluZyB0b28gc2hvcnQgZm9yICJNTSIgZm9ybWF0dGluZyBmaWVsZAogIERFVEFJTDogIEZpZWxk IHJlcXVpcmVzIDIgY2hhcmFjdGVycywgYnV0IG9ubHkgMSByZW1haW4uCiAgSElOVDogIElmIHlv dXIgc291cmNlIHN0cmluZyBpcyBub3QgZml4ZWQtd2lkdGgsIHRyeSB1c2luZyB0aGUgIkZNIiBt b2RpZmllci4KKyAtLSBJbnN1ZmZpY2llbnQgZGlnaXQgY2hhcmFjdGVycyBmb3IgYSBzaW5nbGUg bm9kZToKKyBTRUxFQ1QgJycgQVMgdG9fdGltZXN0YW1wXzI0LCB0b190aW1lc3RhbXAoJzE5OTcx KTI0JywgJ1lZWVlNTUREJyk7CisgRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciAiTU0iIGluIHNv dXJjZSBzdHJpbmcKKyBERVRBSUw6ICBGaWVsZCByZXF1aXJlcyAyIGNoYXJhY3RlcnMsIGJ1dCBv bmx5IDEgY291bGQgYmUgcGFyc2VkLgorIEhJTlQ6ICBJZiB5b3VyIHNvdXJjZSBzdHJpbmcgaXMg bm90IGZpeGVkLXdpZHRoLCB0cnkgdXNpbmcgdGhlICJGTSIgbW9kaWZpZXIuCiAgLS0gVmFsdWUg Y2xvYmJlcmluZzoKISBTRUxFQ1QgJycgQVMgdG9fdGltZXN0YW1wXzI1LCB0b190aW1lc3RhbXAo JzE5OTctMTEtSmFuLTE2JywgJ1lZWVktTU0tTW9uLUREJyk7CiAgRVJST1I6ICBjb25mbGljdGlu ZyB2YWx1ZSBmb3IgIk1vbiIgZmllbGQgaW4gZm9ybWF0dGluZyBzdHJpbmcKICBERVRBSUw6ICBU aGlzIHZhbHVlIGNvbnRyYWRpY3RzIGEgcHJldmlvdXMgc2V0dGluZyBmb3IgdGhlIHNhbWUgZmll bGQgdHlwZS4KICAtLSBOb24tbnVtZXJpYyBpbnB1dDoKISBTRUxFQ1QgJycgQVMgdG9fdGltZXN0 YW1wXzI2LCB0b190aW1lc3RhbXAoJzE5OTcxMXh5JywgJ1lZWVlNTUREJyk7CiAgRVJST1I6ICBp bnZhbGlkIHZhbHVlIGZvciAiREQiIGluIHNvdXJjZSBzdHJpbmcKICBERVRBSUw6ICBWYWx1ZSBt dXN0IGJlIGFuIGludGVnZXIuCiAgLS0gSW5wdXQgdGhhdCBkb2Vzbid0IGZpdCBpbiBhbiBpbnQ6 CiEgU0VMRUNUICcnIEFTIHRvX3RpbWVzdGFtcF8yNywgdG9fdGltZXN0YW1wKCcxMDAwMDAwMDAw MCcsICdGTVlZWVknKTsKICBFUlJPUjogIHZhbHVlIGZvciAiWVlZWSIgaW4gc291cmNlIHN0cmlu ZyBpcyBvdXQgb2YgcmFuZ2UKICBERVRBSUw6ICBWYWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSAt MjE0NzQ4MzY0OCB0byAyMTQ3NDgzNjQ3LgogIFNFVCBEYXRlU3R5bGUgVE8gREVGQVVMVDsKKioq IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpbWVzdGFtcC5zcWwKLS0tIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3RpbWVzdGFtcC5zcWwKKioqKioqKioqKioqKioqCioqKiAyNzksMjkxICoqKiogU0VMRUNU ICcnIEFTIHRvX3RpbWVzdGFtcF8yMiwgdG9fdGltZXN0YW1wKCcyMDA1NTI3JywgJ1lZWVlJV0lE Jyk7CiAgLS0gSW5zdWZmaWNpZW50IGNoYXJhY3RlcnMgaW4gdGhlIHNvdXJjZSBzdHJpbmc6CiAg U0VMRUNUICcnIEFTIHRvX3RpbWVzdGFtcF8yMywgdG9fdGltZXN0YW1wKCcxOTk3MScsICdZWVlZ TU1ERCcpOwogIAogIC0tIFZhbHVlIGNsb2JiZXJpbmc6CiEgU0VMRUNUICcnIEFTIHRvX3RpbWVz dGFtcF8yNCwgdG9fdGltZXN0YW1wKCcxOTk3LTExLUphbi0xNicsICdZWVlZLU1NLU1vbi1ERCcp OwogIAogIC0tIE5vbi1udW1lcmljIGlucHV0OgohIFNFTEVDVCAnJyBBUyB0b190aW1lc3RhbXBf MjQsIHRvX3RpbWVzdGFtcCgnMTk5NzExeHknLCAnWVlZWU1NREQnKTsKICAKICAtLSBJbnB1dCB0 aGF0IGRvZXNuJ3QgZml0IGluIGFuIGludDoKISBTRUxFQ1QgJycgQVMgdG9fdGltZXN0YW1wXzI0 LCB0b190aW1lc3RhbXAoJzEwMDAwMDAwMDAwJywgJ1lZWVknKTsKICAKICBTRVQgRGF0ZVN0eWxl IFRPIERFRkFVTFQ7Ci0tLSAyNzksMjk0IC0tLS0KICAtLSBJbnN1ZmZpY2llbnQgY2hhcmFjdGVy cyBpbiB0aGUgc291cmNlIHN0cmluZzoKICBTRUxFQ1QgJycgQVMgdG9fdGltZXN0YW1wXzIzLCB0 b190aW1lc3RhbXAoJzE5OTcxJywgJ1lZWVlNTUREJyk7CiAgCisgLS0gSW5zdWZmaWNpZW50IGRp Z2l0IGNoYXJhY3RlcnMgZm9yIGEgc2luZ2xlIG5vZGU6CisgU0VMRUNUICcnIEFTIHRvX3RpbWVz dGFtcF8yNCwgdG9fdGltZXN0YW1wKCcxOTk3MSkyNCcsICdZWVlZTU1ERCcpOworIAogIC0tIFZh bHVlIGNsb2JiZXJpbmc6CiEgU0VMRUNUICcnIEFTIHRvX3RpbWVzdGFtcF8yNSwgdG9fdGltZXN0 YW1wKCcxOTk3LTExLUphbi0xNicsICdZWVlZLU1NLU1vbi1ERCcpOwogIAogIC0tIE5vbi1udW1l cmljIGlucHV0OgohIFNFTEVDVCAnJyBBUyB0b190aW1lc3RhbXBfMjYsIHRvX3RpbWVzdGFtcCgn MTk5NzExeHknLCAnWVlZWU1NREQnKTsKICAKICAtLSBJbnB1dCB0aGF0IGRvZXNuJ3QgZml0IGlu IGFuIGludDoKISBTRUxFQ1QgJycgQVMgdG9fdGltZXN0YW1wXzI3LCB0b190aW1lc3RhbXAoJzEw MDAwMDAwMDAwJywgJ0ZNWVlZWScpOwogIAogIFNFVCBEYXRlU3R5bGUgVE8gREVGQVVMVDsK ------=_Part_193028_30711977.1220964376694--