OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 RefPtr<IDBKey> keyPathKey = createIDBKeyFromScriptValueAndKeyPath(value,
keyPath); | 148 RefPtr<IDBKey> keyPathKey = createIDBKeyFromScriptValueAndKeyPath(value,
keyPath); |
149 if (!keyPathKey || !keyPathKey->isEqual(m_currentPrimaryKey.get())) { | 149 if (!keyPathKey || !keyPathKey->isEqual(m_currentPrimaryKey.get())) { |
150 ec = IDBDatabaseException::DATA_ERR; | 150 ec = IDBDatabaseException::DATA_ERR; |
151 return 0; | 151 return 0; |
152 } | 152 } |
153 } | 153 } |
154 | 154 |
155 return objectStore->put(IDBObjectStoreBackendInterface::CursorUpdate, IDBAny
::create(this), context, value, m_currentPrimaryKey, ec); | 155 return objectStore->put(IDBObjectStoreBackendInterface::CursorUpdate, IDBAny
::create(this), context, value, m_currentPrimaryKey, ec); |
156 } | 156 } |
157 | 157 |
158 void IDBCursor::advance(unsigned long count, ExceptionCode& ec) | 158 void IDBCursor::advance(long count, ExceptionCode& ec) |
159 { | 159 { |
160 IDB_TRACE("IDBCursor::advance"); | 160 IDB_TRACE("IDBCursor::advance"); |
161 if (!m_gotValue) { | 161 if (!m_gotValue) { |
162 ec = IDBDatabaseException::IDB_INVALID_STATE_ERR; | 162 ec = IDBDatabaseException::IDB_INVALID_STATE_ERR; |
163 return; | 163 return; |
164 } | 164 } |
165 | 165 |
166 if (!m_transaction->isActive()) { | 166 if (!m_transaction->isActive()) { |
167 ec = IDBDatabaseException::TRANSACTION_INACTIVE_ERR; | 167 ec = IDBDatabaseException::TRANSACTION_INACTIVE_ERR; |
168 return; | 168 return; |
169 } | 169 } |
170 | 170 |
171 if (!count) { | 171 // FIXME: This should only need to check for 0 once webkit.org/b/96798 lands
. |
| 172 const int64_t maxECMAScriptInteger = 0x20000000000000LL - 1; |
| 173 if (count < 1 || count > maxECMAScriptInteger) { |
172 ec = NATIVE_TYPE_ERR; | 174 ec = NATIVE_TYPE_ERR; |
173 return; | 175 return; |
174 } | 176 } |
175 | 177 |
176 m_request->setPendingCursor(this); | 178 m_request->setPendingCursor(this); |
177 m_gotValue = false; | 179 m_gotValue = false; |
178 m_backend->advance(count, m_request, ec); | 180 m_backend->advance(count, m_request, ec); |
179 if (ec) | 181 if (ec) |
180 m_request->markEarlyDeath(); | 182 m_request->markEarlyDeath(); |
181 } | 183 } |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 | 325 |
324 default: | 326 default: |
325 ec = NATIVE_TYPE_ERR; | 327 ec = NATIVE_TYPE_ERR; |
326 return IDBCursor::directionNext(); | 328 return IDBCursor::directionNext(); |
327 } | 329 } |
328 } | 330 } |
329 | 331 |
330 } // namespace WebCore | 332 } // namespace WebCore |
331 | 333 |
332 #endif // ENABLE(INDEXED_DATABASE) | 334 #endif // ENABLE(INDEXED_DATABASE) |
OLD | NEW |