OldDoc means the doc you fetch when you issue a GET before the update
ie the last doc. no revision = null, else the last doc in the database
value.


- benoit

On Sun, Feb 23, 2014 at 1:45 AM, Jens Alfke <[email protected]> wrote:
> What's the exact definition of the 'oldDoc' parameter that's passed to a 
> validation function? The current CouchDB docs just say it's "the current 
> document stored in the database". This is unambiguous during a normal PUT 
> operation, but I've just realized I'm unsure what the exact behavior is 
> during replication or with new_edits=false.
>
> Situation 1: There are no revisions of document "foo" in the database. A 
> replication pulls in revision 3-zzzz of "foo", along with a revision history 
> giving the ancestry as 2-yyyy and 1-xxxx.
> --> Is the validation function called with oldDoc=null, or with 
> oldDoc={"_rev":"2-yyyy"}?
>
> Situation 2: The database contains revision 1-xxxx of "foo". A replication 
> pulls in the same revision 3 as described above.
> --> Is the validation function called with oldDoc={"_rev":"1-xxxx"}, or with 
> oldDoc={"_rev":"2-yyyy"}?
>
> This has an impact on fancy validation functions that want to check for 
> invariants between a new revision and its parent. For example, in the 
> document-signing spec I'm working on, a document's signature data needs to 
> include the revision ID of the parent, to avoid certain types of replay 
> attacks. But if the validation function isn't called with the exact parent 
> revision, there isn't a way for it to determine the parent rev ID to verify 
> the signature.
>
> --Jens

Reply via email to