From 8fa82794ffc2763e9fa1fc9d401c8e9a14d7c67f Mon Sep 17 00:00:00 2001 From: tsepez Date: Wed, 11 Jan 2017 09:32:33 -0800 Subject: Annotation deleted while retrieving it in JS Widgets as returned from GetWidgets() can pop out of existence unexpectedly, so always return observed pointers. This extends the same pattern used elsewhere in the file to all occurrences. BUG=679642 Review-Url: https://codereview.chromium.org/2624933002 --- testing/resources/javascript/bug_679642.in | 140 +++++++++++++++++++++ .../resources/javascript/bug_679642_expected.txt | 3 + 2 files changed, 143 insertions(+) create mode 100644 testing/resources/javascript/bug_679642.in create mode 100644 testing/resources/javascript/bug_679642_expected.txt (limited to 'testing/resources') diff --git a/testing/resources/javascript/bug_679642.in b/testing/resources/javascript/bug_679642.in new file mode 100644 index 0000000000..2241723dd2 --- /dev/null +++ b/testing/resources/javascript/bug_679642.in @@ -0,0 +1,140 @@ +{{header}} +{{object 1 0}} << + /Type /Catalog + /Pages 2 0 R + /AcroForm 4 0 R + /OpenAction 10 0 R +>> +endobj +{{object 2 0}} << + /Type /Pages + /Count 1 + /Kids [ + 3 0 R + ] +>> +endobj +% Page number 0. +{{object 3 0}} << + /Type /Page + /Parent 2 0 R + /Resources << + /Font <> + >> + /Contents [21 0 R] + /MediaBox [0 0 612 792] + /Annots [7 0 R 8 0 R 9 0 R] +>> +endobj +% Forms +{{object 4 0}} << + /XFA [ + (xdp:xdp) 23 0 R + (form) 29 0 R + () 30 0 R + ] + /Fields [ + 5 0 R + ] +>> +endobj +% Fields +{{object 5 0}} << + /T (MyField) + /Kids [ + 6 0 R + ] + /Rect [100 100 400 400] +>> +endobj +{{object 6 0}} << + /Parent 5 0 R + /FT /Btn + /Kids [ + 7 0 R + 8 0 R + 9 0 R + ] + /Rect [200 200 220 220] +>> +endobj +{{object 7 0}} << + /Parent 6 0 R + /Type /Annot + /Subtype /Widget + /Rect [220 220 240 240] +>> +endobj +{{object 8 0}} << + /Parent 6 0 R + /Type /Annot + /Subtype /Widget + /Rect [240 240 260 260] +>> +endobj +{{object 9 0}} << + /Parent 6 0 R + /Type /Annot + /Subtype /Widget + /Rect [240 240 260 260] +>> +endobj +% OpenAction action +{{object 10 0}} << + /Type /Action + /S /JavaScript + /JS 11 0 R +>> +endobj +% JS program to exexute +{{object 11 0}} << +>> +stream +var theName = "MyField"; +function Mangles() { + app.alert('Starting ...'); + try { + var f = this.getField(theName); + Object.defineProperty(Array.prototype, 1, { + get: () => { + return this[1]; + }, + set: (v) => { + app.alert('Firing ...'); + this.removeField(theName); + gc(); + return false; + }, + enumerable: true + }); + f.page; + } catch (e) { + app.alert("failed: " + e); + } +} +Mangles(); +endstream +endobj +{{object 23 0}} << +>>stream + + +endstream +endobj +{{object 29 0}} << +>>stream + + +endstream +endobj +{{object 30 0}} << +>>stream + +endstream +endobj +{{xref}} +trailer << + /Root 1 0 R +>> +{{startxref}} +%%EOF diff --git a/testing/resources/javascript/bug_679642_expected.txt b/testing/resources/javascript/bug_679642_expected.txt new file mode 100644 index 0000000000..9e99cc6883 --- /dev/null +++ b/testing/resources/javascript/bug_679642_expected.txt @@ -0,0 +1,3 @@ +Alert: Starting ... +Alert: Firing ... +Alert: failed: Field.page: Object no longer exists. -- cgit v1.2.3