Changeset 195166 in webkit
- Timestamp:
- Jan 16, 2016 1:36:44 AM (8 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r195155 r195166 1 2016-01-16 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] GVariant runtime critical errors when encoding session data 4 https://bugs.webkit.org/show_bug.cgi?id=153130 5 6 Reviewed by Michael Catanzaro. 7 8 It happens when the FrameState has children, because the recursive 9 serialization is wrong. Also fix serialization of 10 documentSequenceNumber and itemSequenceNumber that are gint64, not 11 guint64. 12 13 * UIProcess/API/gtk/WebKitWebViewSessionState.cpp: 14 (encodeFrameState): Let the caller open/init the given 15 builder. Use a new builder to encode child states recursively. 16 (encodePageState): Do the builder open/close for the FrameState encoding. 17 (decodeFrameState): Get the variant of every child. 18 1 19 2016-01-15 Michael Catanzaro <mcatanzaro@igalia.com> 2 20 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewSessionState.cpp
r194579 r195166 45 45 #define HTTP_BODY_TYPE_STRING_V1 "m(sa" HTTP_BODY_ELEMENT_TYPE_STRING_V1 ")" 46 46 #define HTTP_BODY_FORMAT_STRING_V1 "m(&sa" HTTP_BODY_ELEMENT_TYPE_STRING_V1 ")" 47 #define FRAME_STATE_TYPE_STRING_V1 "(ssssasmay tt(ii)d" HTTP_BODY_TYPE_STRING_V1 "av)"48 #define FRAME_STATE_FORMAT_STRING_V1 "(&s&s&s&sasmay tt(ii)d@" HTTP_BODY_TYPE_STRING_V1 "av)"47 #define FRAME_STATE_TYPE_STRING_V1 "(ssssasmayxx(ii)d" HTTP_BODY_TYPE_STRING_V1 "av)" 48 #define FRAME_STATE_FORMAT_STRING_V1 "(&s&s&s&sasmayxx(ii)d@" HTTP_BODY_TYPE_STRING_V1 "av)" 49 49 #define BACK_FORWARD_LIST_ITEM_TYPE_STRING_V1 "(ts" FRAME_STATE_TYPE_STRING_V1 "u)" 50 50 #define BACK_FORWARD_LIST_ITEM_FORMAT_STRING_V1 "(t&s@" FRAME_STATE_TYPE_STRING_V1 "u)" … … 151 151 static inline void encodeFrameState(GVariantBuilder* sessionBuilder, const FrameState& frameState) 152 152 { 153 g_variant_builder_open(sessionBuilder, G_VARIANT_TYPE(FRAME_STATE_TYPE_STRING_V1));154 153 g_variant_builder_add(sessionBuilder, "s", frameState.urlString.utf8().data()); 155 154 g_variant_builder_add(sessionBuilder, "s", frameState.originalURLString.utf8().data()); … … 170 169 g_variant_builder_close(sessionBuilder); 171 170 } 172 g_variant_builder_add(sessionBuilder, " t", frameState.documentSequenceNumber);173 g_variant_builder_add(sessionBuilder, " t", frameState.itemSequenceNumber);171 g_variant_builder_add(sessionBuilder, "x", frameState.documentSequenceNumber); 172 g_variant_builder_add(sessionBuilder, "x", frameState.itemSequenceNumber); 174 173 g_variant_builder_add(sessionBuilder, "(ii)", frameState.scrollPosition.x(), frameState.scrollPosition.y()); 175 174 g_variant_builder_add(sessionBuilder, "d", frameState.pageScaleFactor); … … 182 181 } 183 182 g_variant_builder_open(sessionBuilder, G_VARIANT_TYPE("av")); 184 for (const auto& child : frameState.children) 185 encodeFrameState(sessionBuilder, child); 186 g_variant_builder_close(sessionBuilder); 183 for (const auto& child : frameState.children) { 184 GVariantBuilder frameStateBuilder; 185 g_variant_builder_init(&frameStateBuilder, G_VARIANT_TYPE(FRAME_STATE_TYPE_STRING_V1)); 186 encodeFrameState(&frameStateBuilder, child); 187 g_variant_builder_add(sessionBuilder, "v", g_variant_builder_end(&frameStateBuilder)); 188 } 187 189 g_variant_builder_close(sessionBuilder); 188 190 } … … 191 193 { 192 194 g_variant_builder_add(sessionBuilder, "s", pageState.title.utf8().data()); 195 g_variant_builder_open(sessionBuilder, G_VARIANT_TYPE(FRAME_STATE_TYPE_STRING_V1)); 193 196 encodeFrameState(sessionBuilder, pageState.mainFrameState); 197 g_variant_builder_close(sessionBuilder); 194 198 g_variant_builder_add(sessionBuilder, "u", toExternalURLsPolicy(pageState.shouldOpenExternalURLsPolicy)); 195 199 } … … 279 283 GUniqueOutPtr<GVariantIter> documentStateIter; 280 284 GUniqueOutPtr<GVariantIter> stateObjectDataIter; 281 g uint64 documentSequenceNumber;282 g uint64 itemSequenceNumber;285 gint64 documentSequenceNumber; 286 gint64 itemSequenceNumber; 283 287 gint32 scrollPositionX, scrollPositionY; 284 288 gdouble pageScaleFactor; … … 319 323 while (GRefPtr<GVariant> child = adoptGRef(g_variant_iter_next_value(childrenIter.get()))) { 320 324 FrameState childFrameState; 321 decodeFrameState(child.get(), childFrameState); 325 GRefPtr<GVariant> childVariant = adoptGRef(g_variant_get_variant(child.get())); 326 decodeFrameState(childVariant.get(), childFrameState); 322 327 frameState.children.append(WTFMove(childFrameState)); 323 328 }
Note: See TracChangeset
for help on using the changeset viewer.