[prev in list] [next in list] [prev in thread] [next in thread] 

List:       webkit-unassigned
Subject:    [Webkit-unassigned] [Bug 125032] New: Web SQL: changeVersion cannot be used in openDatabase creation
From:       bugzilla-daemon () webkit ! org
Date:       2013-11-30 22:28:41
Message-ID: bug-125032-2851 () https ! bugs ! webkit ! org/
[Download RAW message or body]

https://bugs.webkit.org/show_bug.cgi?id=125032

           Summary: Web SQL: changeVersion cannot be used in openDatabase
                    creationCallback
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: New Bugs
        AssignedTo: webkit-unassigned@lists.webkit.org
        ReportedBy: luke@lukestebbing.com


In WebKit 537.71 (Safari 7.0 (9537.71)), I'm seeing the following Web SQL bug. I \
suspect it affects all WebKit versions with Web SQL support.


Navigate to a domain where you wouldn't mind creating a Web SQL database with a \
random name, and run the following snippet in the JS console:

db = openDatabase('' + Math.random(), '1', '', 1, function(db) {
    console.log('creationCallback with version "' + db.version + '"');
    db.changeVersion('', '1', function() {
        console.log('changeVersion callback with version "' + db.version + '"');
    }, function(e) {
        console.log('changeVersion error with version "' + db.version + '"');
        console.log(e.message);
    }, function() {
        console.log('changeVersion success with version "' + db.version + '"')
    });
});


Expected:
    creationCallback with version ""
    changeVersion callback with version ""
    changeVersion success with version "1"

Actual:
    creationCallback with version ""
    changeVersion error with version ""
    current version of the database and `oldVersion` argument do not match


I looked at the WebKit source and I'm pretty sure I know what's going wrong. (I'm \
pinning these urls to a recent revision so they'll be stable, but the problem exists \
at head.)


Since a creationCallback was provided, DatabaseBackendBase::performOpenAndVerify will \
be passed false in for shouldSetVersionInNewDatabase, which means it won't call \
DatabaseBackendBase::setVersionInDatabase: \
https://trac.webkit.org/browser/trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp?rev=159890#L363


(Sure enough, I closed the browser and checked the corresponding sqlite3 database on \
disk, and it had an empty __WebKitDatabaseInfoTable__.)


When DatabaseBackendBase::getVersionFromDatabase calls \
retrieveTextResultFromDatabase, there are no results and it returns a String(), which \
constructs a NULL String: \
https://trac.webkit.org/browser/trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp?rev=159890#L104



The version is checked in ChangeVersionWrapper::performPreflight, which fails because \
actualVersion is a NULL String and compares unequal to any String: \
https://trac.webkit.org/browser/trunk/Source/WebCore/Modules/webdatabase/ChangeVersionWrapper.cpp?rev=159890#L53


-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
_______________________________________________
webkit-unassigned mailing list
webkit-unassigned@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-unassigned


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic