MALICIOUS
104
Risk Score
Malware Insights
MITRE ATT&CK
T1059.007 JavaScript
T1566.001 Spearphishing Attachment
T1203 Exploitation for Client Execution
The PDF file contains embedded JavaScript that triggers an alert message prompting the user to download Adobe Reader. This is a common lure to exploit older versions of the reader or to deliver a second-stage payload. The JavaScript also contains functions related to media playback and comments, suggesting a complex interaction within the PDF. The presence of PDF_JS_EXPLOIT_CLUSTER and PDF_XFA heuristics further supports an exploit attempt.
Machine Learning
- Nyx PDF Classifier suspicious score 0.3469
Heuristics 8
-
JavaScript action low 2 related findings PDF_JAVASCRIPTPDF contains a /JavaScript action. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
-
PDF JavaScript exploit cluster critical PDF_JS_EXPLOIT_CLUSTERPDF combines an executable JavaScript/action surface with exploit staging indicators such as eval/unescape/fromCharCode, XFA script content, or a related CVE pattern. Benign form JavaScript remains low-severity, but this correlated cluster is high-confidence malicious behavior.
-
Embedded JS stream low PDF_JSPDF references a /JS stream. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
-
Embedded file low PDF_EMBEDDEDPDF embeds a file attachment — could carry an executable or another weaponised document as a nested payload
-
XFA form low PDF_XFAPDF uses XML Forms Architecture — can contain script logic
-
AcroForm button with action trigger low PDF_ACROFORM_BUTTONPDF contains a /Btn form field together with a SubmitForm/URI/Launch/JS trigger — this is the building block of fake 'Download' or 'Open' button overlays used in PDF phishing lures
-
Object number defined twice with different bodies info PDF_DUPLICATE_OBJ_BODY_INCREMENTALThe same indirect object (N G) is defined more than once with different body bytes. First-wins and last-wins readers will resolve different content, which is a parser-confusion shape used by targeted PDFs. Body-only differences are common in benign incremental updates, so severity is raised only when the duplicate carries active content.
-
Embedded URL info EMBEDDED_URLOne or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.URL http://www.w3.org/1999/xhtml In PDF document text
- http://www.xfa.org/schema/xfa-data/1.0/In PDF document text
- http://www.adobe.com/products/acrobat/readstep.hIn PDF document text
- http://www.w3.org/1999/02/22-rdf-syntax-ns#In PDF document text
- http://ns.adobe.com/xap/1.0/In PDF document text
- http://ns.adobe.com/xap/1.0/mm/In PDF document text
- http://purl.org/dc/elements/1.1/In PDF document text
- http://www.adobe.com/products/acrobat/readstep.htmlReferenced by PDF JavaScript
Extracted artifacts 32
Files carved from inside the sample during analysis.
| Filename | Kind | Source | Size |
|---|---|---|---|
embedded_filec6c895dd1668be1b2bd23558f05629e164c2a7a7d2971721f70dbd4a022bbf31 |
pdf-embedded-file | PDF EmbeddedFile object 7 at offset 0x21971 | 4194304 bytes |
javascript_obj0017_000.js140666ff3484ac0e529b6691046f1ecfe3837958d2a0fdb5286212c50f8c9348 |
pdf-javascript-stream | PDF /JS object 17 at offset 0x28A4 | 218 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function AddComment()
{
var addCommentTextField = this.getField("AddCommentTextField");
addCommentTextField.setFocus();
player.pause();
if (!editCommentFlag && !addCommentFlag)
{
DoComment();
}
}
|
|||
javascript_obj0019_001.js18232c2b8268bb4fcff21c22f073415427d2c8430f2d79309ef6d9535002f319 |
pdf-javascript-stream | PDF /JS object 19 at offset 0x29F5 | 73 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function CleanUp()
{
this.getField("CommentList").clearItems();
}
|
|||
javascript_obj0028_002.jsdfbcf5b827e9ac46518857efffd4bd38db062e280b5a9d31ee87bf96f851d7e0 |
pdf-javascript-stream | PDF /JS object 28 at offset 0x2BD5 | 234 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function FlashRunningTimecode(time)
{
// console.println("FlashRunningTimeCode: " + GetTimeCodeString(time));
var runningTimecode = this.getField("RunningTimecode");
runningTimecode.value = GetTimeCodeString(time);
}
|
|||
javascript_obj0029_003.jsc0d3556fdb2d1a78a0a458e0c283ddeb07d5d29bd98febcb2c821bc835e1e61e |
pdf-javascript-stream | PDF /JS object 29 at offset 0x2D00 | 166 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function GetCommentHeaderRegex()
{
var regex = /(\[(\w)*?\])?(.*?)(Comment at)?(.*?)(\d)?(\d\d[;:]\d\d[;:]\d\d[;:]\d\d)(.*?)(-)(\s)*/mg;
return regex;
}
|
|||
javascript_obj0033_004.jsbd64f6e57e778f52158b69c21bf2c6c95a5dc2c021053adfc850de5a9dece976 |
pdf-javascript-stream | PDF /JS object 33 at offset 0x2E84 | 139 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function GotoTimeCode(time)
{
player.seek({time: time});
player.play();
player.pause();
player.seek({time: time});
}
|
|||
javascript_obj0036_005.jsff80b0b69f13bf2fbf5df9b01f19461b4fb821ec6bda73e2c69f231f3c4314a8 |
pdf-javascript-stream | PDF /JS object 36 at offset 0x2FA8 | 150 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function PopulateMainCommentField(value)
{
var mainCommentField = this.getField("MainCommentField");
mainCommentField.value = value;
}
|
|||
javascript_obj0039_006.jsd261db8174c30cae64e5123f9cf388938de35b5ba68d49024ab7e7eef4065e6b |
pdf-javascript-stream | PDF /JS object 39 at offset 0x30CD | 140 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function SetFocusToCommentField()
{
console.println("set focus to text field");
this.getField("AddCommentTextField").setFocus();
}
|
|||
javascript_obj0040_007.js74a066b48827abcf696d656faf53d9ca6025a71024c59051c4bcd2e17f94b315 |
pdf-javascript-stream | PDF /JS object 40 at offset 0x3194 | 95 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function TerminateAutomaticCommentDisplay(timeout)
{
app.clearInterval(timeout);
}
|
|||
javascript_obj0041_008.js810cfedc29aa122862ec26a22a79d4f7ca60de8e838d095a4e84145e81854293 |
pdf-javascript-stream | PDF /JS object 41 at offset 0x322A | 73 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function startPlayer()
{
player = app.media.openPlayer(args);
}
|
|||
javascript_obj0306_010.js61bcf213e53ff9617ee864df9f70f68c4b1f4566c3ea384a94fbcc154a924df2 |
pdf-javascript-stream | PDF /JS object 306 at offset 0x1A70E | 45 bytes |
Preview scriptFirst 1,000 lines of the extracted script
SaveComment();
app.execMenuItem("Save");
|
|||
javascript_obj0369_013.js99da2d0ce4eb85a98600463aaf290d4aa1fa51637b98f567c637e28b2fdc09a3 |
pdf-javascript-stream | PDF /JS object 369 at offset 0x1E851 | 80 bytes |
Preview scriptFirst 1,000 lines of the extracted script
console.println("AddCommentTextField lost focus");
finishedCommentFlag = 1;
|
|||
javascript_obj0370_014.js1ec36dfedb833894e2db10a5ccbef19c62e6cfa1240ed9d40fd7611f2c1ce970 |
pdf-javascript-stream | PDF /JS object 370 at offset 0x1E8D1 | 47 bytes |
Preview scriptFirst 1,000 lines of the extracted script
commentDirty = 1; finishedCommentFlag = 0; |
|||
javascript_obj0399_015.js7b573bcd65de575959297fc2109d74f2d08a1679525780df63caf6ffd4860a71 |
pdf-javascript-stream | PDF /JS object 399 at offset 0x20582 | 219 bytes |
Preview scriptFirst 1,000 lines of the extracted script
if ( intiatedAutomaticCommentDisplayFlag == 1)
{
TerminateAutomaticCommentDisplay(timeout);
intiatedAutomaticCommentDisplayFlag = 0;
console.println("\n terminated recursive automatic comment display");
}
|
|||
javascript_obj0400_016.jsff5952889d6affeb5ea21493215a5e39cbbcdc47f904921764c4ed32ea32a648 |
pdf-javascript-stream | PDF /JS object 400 at offset 0x2069A | 742 bytes |
Preview scriptFirst 1,000 lines of the extracted script
/*Ubiquity*/
var needsUpdate = 0;
if (app.viewerType == "Exchange" && app.viewerVariation=="Fill-In")
needsUpdate = 1;
else if (app.viewerType == "Reader")
{
if (app.viewerVersion >= 6.0)
needsUpdate = 0;
else
needsUpdate = 1;
}
if (needsUpdate)
{
var ans = app.alert("To use all the features of this document,\nyou must use Adobe Reader 6.0 or later\nor Acrobat 6.0 or later.\n\nBecause you have an older version, or\nAcrobat Approval, some features will not work.\n\nClick OK to download the latest version of\nthe free Adobe Reader, which will enable\nthe additional features of this document.\n", 1, 1);
if (ans == 1)
this.getURL("http://www.adobe.com/products/acrobat/readstep.html", false);
}
|
|||
javascript_obj0042_017.jsf260d502a9405d58607e2b39972b80c772177e462dd1a316f3b227d39f1d0e00 |
pdf-javascript-stream | PDF /JS object 42 at offset 0x32AA | 3544 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function SaveComment()
{
try
{
if (addCommentFlag == 1)
{
// Set the names of comments.
var timeCodeTextFieldName = "timeCodeTextField" + numComments;
var textAnnotFieldName = "textAnnotField" + numComments;
// Get the reviewer's name.
var enclosedReviewerName = GetEnclosedReviewerName();
// Get handles to various fields.
var addCommentTextField = this.getField("AddCommentTextField");
if (addCommentTextField.value != "")
{
var reviewerNameTextField = this.getField("ReviewerNameTextField");
var list = this.getField("CommentList");
// Add two annots, time code ones are not visible to the user.
timeCodeTextFieldArray[numComments] = this.addAnnot({
page: 0,
type: "Text",
point: [400,720],
name: timeCodeTextFieldName,
author: timeCodeTextFieldName,
contents: "",
readOnly: true,
hidden: true,
noView: false
});
textAnnotField[numComments] = this.addAnnot({
page: 0,
type: "Text",
point: [720,400],
name: textAnnotFieldName,
author: reviewerNameTextField.valueAsString,
contents: "",
readOnly: true,
noView: true
});
// Set the values
textAnnotField[numComments].contents = AppendStartTagToComment(addCommentTextField.valueAsString, addCommentTextFieldTimeCode);
timeCodeArray[numComments] = Math.floor((addCommentTextFieldTimeCode + 0.0001) * frameRate);
timeCodeTextFieldArray[numComments].contents = Math.floor((addCommentTextFieldTimeCode + 0.0001) * frameRate);
//insert comment into combobox
var insertPositionInCommentList = FindLocationInCommentList( Math.floor((addCommentTextFieldTimeCode + 0.0001) * frameRate));
var firstFew = GetFirstFewCharsFromComment(textAnnotField[numComments].contents);
addCommentFlag = 0; // important to put it here to take care of reentrancy
list.insertItemAt(GetTimeCodeString(addCommentTextFieldTimeCode) + firstFew, Math.floor((addCommentTextFieldTimeCode + 0.0001) * frameRate), insertPositionInCommentList);
numComments++;
numCommentsField.value = numComments;
addCommentTextField.readonly = true;
isDirtyFlag = 1;
}
// AddCommentFlag is always unset after saveComment
console.println("addcommentflag set to 0 in save comment");
addCommentFlag = 0;
commentDirty = 0;
}
else
if(editCommentFlag ==1)
{
var addCommentTextField = this.getField("AddCommentTextField");
var textFieldIndex = FindLocationInTimeCodeArray(Math.floor((addCommentTextFieldTimeCode + 0.0001) * frameRate));
var header = textAnnotField[textFieldIndex].contents.match(GetCommentHeaderRegex())[0];
textAnnotField[textFieldIndex].contents = header + addCommentTextField.valueAsString;
editCommentFlag = 0; //important to put it here to take care of reentrancy
addCommentTextField.readonly = true;
var list = this.getField("CommentList");
var positionNum = FindLocationInCommentList(Math.floor((addCommentTextFieldTimeCode + 0.0001) * frameRate));
list.deleteItemAt(positionNum);
var firstFew = GetFirstFewCharsFromComment(textAnnotField[textFieldIndex].contents);
list.insertItemAt(GetTimeCodeString(addCommentTextFieldTimeCode) + firstFew,Math.floor((addCommentTextFieldTimeCode + 0.0001) * frameRate), positionNum);
isDirtyFlag = 1;
commentDirty = 0;
}
}
catch(e)
{
console.println(e.extMessage);
}
}
|
|||
javascript_obj0043_018.jsf77e2edcf33d85ca9b0b0983a489fe3e2bebd7455fe7b53b3eba560530d2e438 |
pdf-javascript-stream | PDF /JS object 43 at offset 0x36CB | 747 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function PutCommentToStagingArea(comment)
{
var addCommentTextField = this.getField("AddCommentTextField");
var stagingAreaCommentHeaderField = this.getField("StagingAreaCommentHeaderField");
if( comment != "")
{
var regex = GetCommentHeaderRegex();
var matchedText = regex.exec(comment);
//console.println(matchedText[0]);
var truncatedComment = comment.replace( regex , '');
addCommentTextField.value = truncatedComment;
addCommentTextField.readOnly = true;
stagingAreaCommentHeaderField.value = matchedText[0];
}
else
{
addCommentTextField.value = "";
stagingAreaCommentHeaderField.value = "";
}
}
|
|||
javascript_obj0044_019.js44ed9cf0e476e0ebb40fc38ca9459056beba58ac8f84c49722d4e46c861389ce |
pdf-javascript-stream | PDF /JS object 44 at offset 0x382B | 785 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function OnSelChangeCombo()
{
console.println("OnSelChangeCombo");
if (!event.willCommit && event.changeEx != "")
{
var frameNumber = event.changeEx;
console.println("OnSelChangeCombo and !willCommit");
SaveComment();
console.println("OnSelChangeCombo and !willCommit and saved comment");
editCommentFlag = 0;
addCommentFlag = 0;
var positionNum = FindLocationInTimeCodeArray(frameNumber);
// console.println(positionNum);
console.println(frameNumber);
PutCommentToStagingArea(textAnnotField[positionNum].contents);
addCommentTextFieldTimeCode = frameNumber / frameRate;
var timecode = parseFloat(frameNumber / frameRate);
console.println("timecode" + timecode);
GotoTimeCode(timecode + 0.01);
// EditComment();
}
}
|
|||
javascript_obj0045_020.js2dde17b958cbcbf48ccecabfc53fd4bd1098ecf7c8325bce9baaa8f789e93776 |
pdf-javascript-stream | PDF /JS object 45 at offset 0x39CE | 5305 bytes |
Preview scriptFirst 1,000 lines of the extracted script
/*******************************************************************/
/* */
/* ADOBE CONFIDENTIAL */
/* _ _ _ _ _ _ _ _ _ _ _ _ _ */
/* */
/* Copyright 2004 Adobe Systems Incorporated */
/* All Rights Reserved. */
/* */
/* NOTICE: All information contained herein is, and remains the */
/* property of Adobe Systems Incorporated and its suppliers, if */
/* any. The intellectual and technical concepts contained */
/* herein are proprietary to Adobe Systems Incorporated and its */
/* suppliers and may be covered by U.S. and Foreign Patents, */
/* patents in process, and are protected by trade secret or */
/* copyright law. Dissemination of this information or */
/* reproduction of this material is strictly forbidden unless */
/* prior written permission is obtained from Adobe Systems */
/* Incorporated. */
/* */
/*******************************************************************/
/*
** Adobe patent application tracking # B032,
** entitled "Method For Annotating Time Line Based Content In Pdf",
** inventors: Grant, Nydam, Gupta, Gupta
*/
var location = 700;
var textField = new Array();
var textAnnotField = new Array();
var numCommentsField = this.getField("NumComments");
var numComments = numCommentsField.value;
var pageN = 1;
var timeout = 0;
var intiatedAutomaticCommentDisplayFlag = 0;
var gotoButtonArray = new Array();
var timeCodeArray = new Array();
var timeCodeTextFieldArray = new Array();
var mainCommentFieldTimeCode = 0.0;
var addCommentTextFieldTimeCode = 0.0;
var addCommentFlag = 0;
var editCommentFlag = 0;
var isDirtyFlag = 0;
var duration = 141.0;
var numCharsInCommentList = 28;
// app.execMenuItem("Annots:CommentsSummaryPane");
// app.execMenuItem("FullScreen");
app.execMenuItem("FitPage");
/*var timeout = InitiateAutomaticCommentDisplay();*/
var playButtonIconIsSetFlag = 1;
var selChangeFromPrevNextCommentButtonsFlag = 0;
// What follows might seems weird but we need to
// do this becasue Acrobat for some unknown reason
// only exports comments put through acrobat
// since the following comments are put by Premeire
// their values were not getting exporter
// [TODO] Find a solution from Acrobat team for this
// or if it's a bug get it fixed
var returnEMailAddressAnnot = this.getAnnot(0, "returnEmailAddress");
returnEMailAddressAnnot.contents = returnEMailAddressAnnot.contents;
var pdfInstructionsAnnot = this.getAnnot(0, "pdfInstructions");
pdfInstructionsAnnot.contents = pdfInstructionsAnnot.contents;
var seqIDAnnot = this.getAnnot(0, "seqID");
seqIDAnnot.contents = seqIDAnnot.contents;
var startTimeAnnot = this.getAnnot(0, "startTime");
startTimeAnnot.contents = startTimeAnnot.contents;
var frameRateAnnot = this.getAnnot(0, "frameRateField");
frameRateAnnot.contents = frameRateAnnot.contents;
var frameRateString = frameRateAnnot.contents;
var frameRate = new String();
if (frameRateString == "NTSC")
{
frameRate = "29.97";
}
else
{
frameRate = "25.00";
}
var timeDisplayAnnot = this.getAnnot(0, "timeDisplay");
timeDisplayAnnot.contents = timeDisplayAnnot.contents;
var timeDisplay = timeDisplayAnnot.contents;
CleanUp();
var tempName= "textAnnotField";
for ( var i = 0; i < numComments; i++)
{
textAnnotField[i] = this.getAnnot( 0 , tempName + i);
timeCodeTextFieldArray[i] = this.getAnnot(0,"timeCodeTextField" + i);
if (textAnnotField[i] != null && timeCodeTextFieldArray[i] != null)
{
var insertPositionInCommentList = FindLocationInCommentList( timeCodeTextFieldArray[i].con
... (truncated)
|
|||
javascript_obj0046_021.js5be6c9abca3f42949e321ebc3ab9183224992c8b7fccb7ee82936aeeba57cc90 |
pdf-javascript-stream | PDF /JS object 46 at offset 0x410E | 1496 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function GetTimeCodeString( time)
{
var timeCodeString = new String();
var timeDisplayFormat = new String();
timeDisplayFormat = timeDisplay;
time += 0.01 * ( 1.0 / frameRate);
if (frameRate == 29.97 && timeDisplayFormat == "DropFrame")
{
// [NOTE] pankaj
// Be careful here, the logic is complex
// partly due to optimizations
var frames = Math.floor(time * 29.97);
var tenMinutes = Math.floor(frames / 17982); // 10 * 30 * 60 - 18
var hours = Math.floor(tenMinutes / 6);
var afterTenMinFrames = frames - tenMinutes * 17982;
var lastMinutes = 0;
if (afterTenMinFrames >= 1800)
{
lastMinutes = Math.floor((afterTenMinFrames - 1800) / 1798 ) + 1; // 1798 = 10 * 60 * 30 - 2
}
var minutes = (tenMinutes - (hours*6)) * 10 + lastMinutes;
var afterMinFrames = (afterTenMinFrames - lastMinutes*1798);
var seconds = Math.floor(afterMinFrames / 30);
var lastFrames = afterMinFrames - seconds * 30;
timeCodeString = util.printf(" %02d;%02d;%02d;%02d ", hours, minutes, seconds, lastFrames);
}
else
{
var hours = Math.floor( time / 3600);
var minutes = Math.floor( ( time - (hours*3600)) /60);
var seconds = Math.floor( time % 60);
/*var hundredthSecs = Math.floor( (time - Math.floor(time)) * 100); */
var frames = Math.floor((time - Math.floor(time)) * frameRate);
timeCodeString = util.printf(" %02d:%02d:%02d:%02d ", hours, minutes, seconds, frames);
}
return timeCodeString;
}
|
|||
javascript_obj0047_022.js09f5ca347e5a9653212e337e8736dc684c653d92749fb0393e098da202fbcc77 |
pdf-javascript-stream | PDF /JS object 47 at offset 0x438E | 273 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function GetFirstFewCharsFromComment(inComment)
{
var tempStr = inComment.replace( GetCommentHeaderRegex() , '');
var firstFew = tempStr.substring(0,numCharsInCommentList);
if (tempStr.length > firstFew.length)
{
firstFew += "...";
}
return firstFew;
}
|
|||
javascript_obj0048_023.js6b2a8e4a51569bddf8962a8a928dc650490b47f1603c8cf12d138bae7b2063d5 |
pdf-javascript-stream | PDF /JS object 48 at offset 0x448D | 302 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function GetEnclosedReviewerName()
{
// Get the reviewer's name.
var reviewerNameTextField = this.getField("ReviewerNameTextField");
var reviewerName = "[" + reviewerNameTextField.valueAsString + "]";
if( reviewerNameTextField.value == "")
reviewerName = "";
return reviewerName;
}
|
|||
javascript_obj0049_024.jsaad725103e8376908690a702de25290c0c79d219e82c0912f50e8b6af83b36af |
pdf-javascript-stream | PDF /JS object 49 at offset 0x4580 | 358 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function FlashCommentToMainWindow(time)
{
if(time != 0)
{
var positionNum = FindLocationInTimeCodeArray(Math.floor((time + 0.0001) * frameRate));
if (positionNum != null)
{
PutCommentToStagingArea(textAnnotField[positionNum].contents);
}
}
else
{
PutCommentToStagingArea("");
}
}
|
|||
javascript_obj0050_025.js0cb03d7d07c66ddbec3c29d7485a522a440f0e4484f2e2e04e526a4e5a9ea178 |
pdf-javascript-stream | PDF /JS object 50 at offset 0x46B0 | 458 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function FindLocationInTimeCodeArray(timeCodeValue)
{
for ( var i = 0; i < numCommentsField.value; i++)
{
if ( typeof timeCodeTextFieldArray[i] != "undefined" && timeCodeTextFieldArray[i] != null)
{
var tempAnnotHandle = this.getAnnot(0,"timeCodeTextField" + i);
if( tempAnnotHandle != null)
if( parseFloat(timeCodeValue) == parseFloat(tempAnnotHandle.contents))
return i;
}
}
}
|
|||
javascript_obj0051_026.jsa042daba7ffdf35e4fefc7e648831dd68f33a78711644af4c573220d3d026fd4 |
pdf-javascript-stream | PDF /JS object 51 at offset 0x47F6 | 277 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function FindLocationInCommentList(time)
{
var returnVal = 0;
var l = this.getField("CommentList");
for ( var i = 0; i < l.numItems; i++)
{
if( time > Number(l.getItemAt(i)) )
returnVal = i + 1;
}
return returnVal;
}
|
|||
javascript_obj0052_027.jsf692536ec264cfc24e42aae57a09bba58d5dd561caaf381c7db90f146033c7e3 |
pdf-javascript-stream | PDF /JS object 52 at offset 0x48F0 | 571 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function FindCommentMarkerToPlayerTime()
{
var where = player.where();
var time = where.time;
var returnVal = 0;
var floatTime = 0;
for ( var i = 0; i < timeCodeTextFieldArray.length; i++)
{
if ( timeCodeTextFieldArray[i] != null)
{
floatTime = timeCodeTextFieldArray[i].contents / frameRate;
floatTime = Number(floatTime);
if ( time > floatTime)
if( returnVal < floatTime )
returnVal = floatTime;
}
}
return returnVal;
}
|
|||
javascript_obj0053_028.jsc7532caf15f36663cba741cb9f9395d71d3abad570ec5cd6d0b1e684e420c3fb |
pdf-javascript-stream | PDF /JS object 53 at offset 0x4A3A | 605 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function EditComment()
{
var time = player.where().time;
// Comment already exists. Prepare for editing
editCommentFlag = 1;
var addCommentTextField = this.getField("AddCommentTextField");
addCommentTextField.readonly = false;
addCommentTextField.setFocus();
//addCommentTextField.value = textAnnotField[positionNum].contents;
addCommentTextFieldTimeCode = time;
// Flash running timecode
// We have to synchronize the two time displayed time codes
var runningTimecode = this.getField("RunningTimecode");
runningTimecode.value = GetTimeCodeString(time);
}
|
|||
javascript_obj0054_029.js0ef975e1d00aa0c28b691c6e99940503499384645cbc3cd6aa0157c91e7f6319 |
pdf-javascript-stream | PDF /JS object 54 at offset 0x4BB4 | 1766 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function DoComment()
{
// means that pausing didn't prepare for adding or editing a comment
editCommentFlag = 0;
addCommentFlag = 0;
var time = player.where().time;
var addCommentTextField = this.getField("AddCommentTextField");
var stagingAreaCommentHeaderField = this.getField("StagingAreaCommentHeaderField");
var enclosedReviewerName = GetEnclosedReviewerName();
var truncatedTimeCodeValue = Math.floor((time + 0.0001) * frameRate);
var positionNum = FindLocationInTimeCodeArray(truncatedTimeCodeValue);
if (positionNum == null)
{
// Prepare for adding a new comment
addCommentTextField.value = "";
addCommentTextFieldTimeCode = time;
// [NOTE] ideally we should be doing this last but doing here to take care of some issues with setfocus
addCommentFlag = 1;
finishedCommentFlag = 0;
addCommentTextField.readonly = false;
addCommentTextFieldTimeCode = time;
stagingAreaCommentHeaderField.value = enclosedReviewerName + " " + GetTimeCodeString(time);
console.println("stagingAreaCommentHeaderField set");
// Flash running timecode
// We have to synchronize the two time codes displayed
var runningTimecode = this.getField("RunningTimecode");
runningTimecode.value = GetTimeCodeString(time);
}
else
{
// Comment already exists. Prepare for editing
editCommentFlag = 1;
finishedCommentFlag = 0;
addCommentTextField.readonly = false;
addCommentTextFieldTimeCode = time;
PutCommentToStagingArea(textAnnotField[positionNum].contents);
// Flash running timecode
// We have to synchronize the two time displayed time codes
var runningTimecode = this.getField("RunningTimecode");
runningTimecode.value = GetTimeCodeString(time);
}
}
|
|||
javascript_obj0055_030.js971d13b4621eaa71b1fdf6468691a91ae362802c0e42d08f83287e9e53e86dc0 |
pdf-javascript-stream | PDF /JS object 55 at offset 0x4E73 | 2381 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function DisplayAutomaticComment()
{
try
{
// remove reentrance by defining a mutex
if (displayCommentMutex == 0)
{
displayCommentMutex = displayCommentMutex + 1;
// console.println("DisplayCOmmentMutex:" + displayCommentMutex);
/////////////////ACTUAL CODE//////////////////////////////////////////////////ACTUAL CODE/////////////////////////////////
if (player.isOpen)
{
if (addCommentFlag == 0 && editCommentFlag == 0)
{
if (player.isPlaying)
{
// flash comments while playing
var commentTime = FindCommentMarkerToPlayerTime();
if (commentTime != oldCommentTime)
{
FlashCommentToMainWindow(commentTime);
}
FlashRunningTimecode(player.where().time);
oldCommentTime = commentTime;
}
else
{
// prepare for adding a comment
try
{
var commentTime = player.where().time;
if (commentTime != oldCommentTime)
{
SetFocusToCommentField();
FlashRunningTimecode(commentTime);
DoComment();
oldCommentTime = commentTime;
}
}catch(e)
{
console.println(e.extMessage);
}
}
}
else
{
// A comment has been added, save the comment.
try
{
if(finishedCommentFlag)
{
var commentTime = player.where().time;
if (commentTime == oldCommentTime)
{
if (commentDirty)
{
SaveComment();
if (!player.isPlaying)
{
var addCommentTextField = this.getField("AddCommentTextField");
addCommentTextField.readonly = false;
if (addCommentTextField.valueAsString != "")
{
editCommentFlag = 1;
}
else
{
addCommentFlag = 1;
}
}
}
}
else
{
SaveComment();
}
}
}
catch(e)
{
console.println(e.extMessage);
}
}
}
/////////////////ACTUAL CODE//////////////////////////////////////////////////ACTUAL CODE/////////////////////////////////
displayCommentMutex = 0;
}
else
{
console.println("Mutex interrupted me");
}
}
catch(e)
{
console.println(e.extMessage);
}
}
|
|||
javascript_obj0056_031.jse9adb23c66bae7ca9386411d5abffa651ea1e2c9c6aa39fbfdfc506b60cc0504 |
pdf-javascript-stream | PDF /JS object 56 at offset 0x5171 | 1228 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function DeleteComment()
{
var addCommentTextField = this.getField("AddCommentTextField");
if (addCommentFlag)
{
addCommentTextField.value = "";
addCommentTextField.setFocus();
}
else
{
editCommentFlag = 0;
addCommentFlag = 0;
var l = this.getField("CommentList");
if( l.numItems != 0)
{
var nButton = app.alert({nIcon: 1, nType: 2, cMsg: "Do you really want to delete the comment?"});
if( nButton == 4) /* reponse is yes */
{
var positionNum = FindLocationInTimeCodeArray(l.value);
if( typeof textAnnotField[positionNum] != "undefined" )
{
textAnnotField[positionNum].destroy();
textAnnotField[positionNum] = null;
timeCodeTextFieldArray[positionNum].destroy();
timeCodeTextFieldArray[positionNum] = null;
}
var currIndex = l.currentValueIndices;
l.deleteItemAt();
if( l.numItems != 0)
{
if (currIndex > 0) // select the prev comment
{
l.currentValueIndices = currIndex - 1;
}
else // select the next comment
{
l.currentValueIndices = currIndex;
}
}
DoComment();
addCommentTextField.setFocus();
}
}
}
}
|
|||
javascript_obj0057_032.js7516046ae8f7c11e9a166ebed6d247a1f4f363bed33c53337c620474de3301c8 |
pdf-javascript-stream | PDF /JS object 57 at offset 0x53B1 | 263 bytes |
Preview scriptFirst 1,000 lines of the extracted script
function AppendStartTagToComment(comment , timecode)
{
// Get the reviewer's name.
var enclosedReviewerName = GetEnclosedReviewerName();
comment = enclosedReviewerName + " " + GetTimeCodeString(timecode) + " -" + comment ;
return comment;
}
|
|||
javascript_obj0365_033.js45295405e99b9c446fdc6068eb98682231d4f6505734817f094582451379da37 |
pdf-javascript-stream | PDF /JS object 365 at offset 0x1E3A0 | 1249 bytes |
Preview scriptFirst 1,000 lines of the extracted script
SaveComment();
// if( isDirtyFlag == 1) // always export XFDF, earlier happened only when comments had been added.
{
// app.alert("You have made changes to the comments since you last saved the comments. Please save the comments.");
this.exportAsXFDF({ bAnnotations: true, bAllFields: true});
isDirtyFlag = 0;
}
var returnEmailAddressAnnot = this.getAnnot(0, "returnEmailAddress");
if (returnEmailAddressAnnot.contents != "")
{
var reviewerName = this.getField("ReviewerNameTextField").valueAsString;
var body = "Hello.%0A%0DMy comments for the recent Adobe Clip Notes review session are attached to this e-mail. Please import them into the original " + this.getAnnot(0,"appName").contents +" project sequence/composition to view them.%0A%0D%0A%0D Thanks,";
// [HACK] pankaj 05.13.2005
// Need to fix this immidiately for UIF hence hardcoding the default name here
if (reviewerName != "Enter your name here")
{
body = body + "%0A%0D" + reviewerName;
}
var cURLString = "mailto:" + returnEmailAddressAnnot.contents + "?subject=Clip Notes Comments&body=" + body + "&ui=true";
this.submitForm({
bAnnotations: true,
cURL: cURLString,
cSubmitAs: "XFDF",
bInclNMKey: true
});
}
|
|||
Open this report in the interactive analyzer, or submit your own file for analysis.