Browse Source

FOP-2869: basic-link to embedded file broken with encryption

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1862597 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-2_4
Simon Steiner 4 years ago
parent
commit
dbad6491f8

+ 9
- 0
fop-core/src/main/java/org/apache/fop/pdf/PDFAction.java View File

@@ -35,5 +35,14 @@ public abstract class PDFAction extends PDFObject {
*/
public abstract String getAction();

protected String encodeScript(String text) {
if (getDocument() != null && getDocumentSafely().isEncryptionActive()) {
final byte[] buf = PDFText.encode(text);
byte[] enc = getDocument().getEncryption().encrypt(buf, this);
return PDFText.toHex(enc, true);
} else {
return "(" + text + ")";
}
}

}

+ 3
- 4
fop-core/src/main/java/org/apache/fop/pdf/PDFJavaScriptLaunchAction.java View File

@@ -43,12 +43,11 @@ public class PDFJavaScriptLaunchAction extends PDFAction {
/** {@inheritDoc} */
public String toPDFString() {
StringBuffer sb = new StringBuffer(64);
sb.append("<<\n/S /JavaScript\n/JS (");
sb.append(this.script);
sb.append(")\n>>");
sb.append("<<\n/S /JavaScript\n/JS ");
sb.append(encodeScript(this.script));
sb.append("\n>>");
return sb.toString();
}

/** {@inheritDoc} */
protected boolean contentEquals(PDFObject obj) {
if (this == obj) {

+ 1
- 11
fop-core/src/main/java/org/apache/fop/pdf/PDFUri.java View File

@@ -49,7 +49,7 @@ public class PDFUri extends PDFAction {
}

private String getDictString() {
return "<< /URI " + encodeURI(uri) + "\n/S /URI >>";
return "<< /URI " + encodeScript(uri) + "\n/S /URI >>";
}

/** {@inheritDoc} */
@@ -57,14 +57,4 @@ public class PDFUri extends PDFAction {
//TODO Convert this class into a dictionary
return getDictString();
}

private String encodeURI(String text) {
if (getDocument() != null && getDocumentSafely().isEncryptionActive()) {
final byte[] buf = PDFText.encode(text);
byte[] enc = getDocument().getEncryption().encrypt(buf, this);
return PDFText.toHex(enc, true);
} else {
return "(" + text + ")";
}
}
}

+ 43
- 0
fop-core/src/test/java/org/apache/fop/pdf/PDFJavaScriptLaunchActionTestCase.java View File

@@ -0,0 +1,43 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.fop.pdf;

import org.junit.Test;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class PDFJavaScriptLaunchActionTestCase {

@Test
public void testToPDFStringShouldEncrypt() {
String jsScript = "this.exportDataObject({cName:\"some.pdf\", nLaunch:2});";
PDFJavaScriptLaunchAction action = new PDFJavaScriptLaunchAction(jsScript);
PDFDocument document = new PDFDocument("<test />");
document.setEncryption(new PDFEncryptionParams(null, null, false,
true, false, true, true));
action.setDocument(document);
action.setObjectNumber(1);

String pdfString = action.toPDFString();

assertTrue(pdfString.startsWith("<<\n/S /JavaScript\n/JS <"));
assertFalse(pdfString.contains(jsScript));
assertTrue(pdfString.endsWith(">\n>>"));
}
}

Loading…
Cancel
Save