Skip to content
This repository was archived by the owner on Nov 7, 2024. It is now read-only.

Commit afb2f55

Browse files
authored
Merge pull request #68 from lukasj/iss58
fixes #58: IOOBEx when referencing a non-existing member in json patch
2 parents 9e9ccba + 11e447a commit afb2f55

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

impl/src/main/java/org/glassfish/json/JsonPointerImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,9 @@ private NodeReference[] getReferences(JsonStructure target) {
273273
JsonArray array = (JsonArray) value;
274274
references[s-i-1] = NodeReference.of(array, index);
275275
if (i < s-1 && index != -1) {
276+
if (index >= array.size()) {
277+
throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
278+
}
276279
// The last array index in the path can have index value of -1
277280
// ("-" in the JSON pointer)
278281
value = array.get(index);
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3+
*
4+
* Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
5+
*
6+
* The contents of this file are subject to the terms of either the GNU
7+
* General Public License Version 2 only ("GPL") or the Common Development
8+
* and Distribution License("CDDL") (collectively, the "License"). You
9+
* may not use this file except in compliance with the License. You can
10+
* obtain a copy of the License at
11+
* https://oss.oracle.com/licenses/CDDL+GPL-1.1
12+
* or LICENSE.txt. See the License for the specific
13+
* language governing permissions and limitations under the License.
14+
*
15+
* When distributing the software, include this License Header Notice in each
16+
* file and include the License file at LICENSE.txt.
17+
*
18+
* GPL Classpath Exception:
19+
* Oracle designates this particular file as subject to the "Classpath"
20+
* exception as provided by Oracle in the GPL Version 2 section of the License
21+
* file that accompanied this code.
22+
*
23+
* Modifications:
24+
* If applicable, add the following below the License Header, with the fields
25+
* enclosed by brackets [] replaced by your own identifying information:
26+
* "Portions Copyright [year] [name of copyright owner]"
27+
*
28+
* Contributor(s):
29+
* If you wish your version of this file to be governed by only the CDDL or
30+
* only the GPL Version 2, indicate your decision by adding "[Contributor]
31+
* elects to include this software in this distribution under the [CDDL or GPL
32+
* Version 2] license." If you don't indicate a single choice of license, a
33+
* recipient has the option to distribute your version of this file under
34+
* either the CDDL, the GPL Version 2 or to extend the choice of license to
35+
* its licensees as provided above. However, if you add GPL Version 2 code
36+
* and therefore, elected the GPL Version 2 license, then the option applies
37+
* only if the new code is made subject to such option by the copyright
38+
* holder.
39+
*/
40+
41+
package org.glassfish.json.tests;
42+
43+
import javax.json.Json;
44+
import javax.json.JsonArray;
45+
import javax.json.JsonException;
46+
import javax.json.JsonPatch;
47+
import org.junit.Test;
48+
49+
/**
50+
*
51+
* @author lukas
52+
*/
53+
public class JsonPatchBugsTest {
54+
55+
// https://github.com/javaee/jsonp/issues/58
56+
@Test(expected = JsonException.class)
57+
public void applyThrowsJsonException() {
58+
JsonArray array = Json.createArrayBuilder()
59+
.add(Json.createObjectBuilder()
60+
.add("name", "Bob")
61+
.build())
62+
.build();
63+
JsonPatch patch = Json.createPatchBuilder()
64+
.replace("/0/name", "Bobek")
65+
.replace("/1/name", "Vila Amalka")
66+
.build();
67+
JsonArray result = patch.apply(array);
68+
}
69+
}

0 commit comments

Comments
 (0)