Skip to content

Commit 3972557

Browse files
authored
Merge pull request #19 from codedx/dev/java-8
dev/java-8 pull request
2 parents 00e3ad2 + 1a1ce8d commit 3972557

File tree

10 files changed

+107
-16
lines changed

10 files changed

+107
-16
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ language: scala
22
scala:
33
- 2.10.4
44
jdk:
5-
- oraclejdk7
6-
- openjdk7
75
- oraclejdk8
6+
- openjdk8
7+
dist: trusty
88
sudo: false
99
cache:
1010
directories:

bytefrog

Submodule bytefrog updated from 4ba6384 to 884936f

codepulse/src/main/scala/com/secdec/codepulse/data/bytecode/MethodContentVisitor.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ object AsmVisitors {
3939
}
4040
}
4141

42-
class MethodContentVisitor(counterCallback: AsmVisitors.CounterCallback) extends MethodVisitor(Opcodes.ASM4) {
42+
class MethodContentVisitor(counterCallback: AsmVisitors.CounterCallback) extends MethodVisitor(Opcodes.ASM5) {
4343
private var instructionCounter = 0
4444

4545
def inc() = instructionCounter += 1
@@ -61,7 +61,7 @@ class MethodContentVisitor(counterCallback: AsmVisitors.CounterCallback) extends
6161
override def visitVarInsn(opcode: Int, v: Int): Unit = inc()
6262
}
6363

64-
class ClassStructureVisitor2(methodCallback: AsmVisitors.MethodCallback) extends ClassVisitor(Opcodes.ASM4) {
64+
class ClassStructureVisitor2(methodCallback: AsmVisitors.MethodCallback) extends ClassVisitor(Opcodes.ASM5) {
6565
private var classSignature = ""
6666

6767
override def visit(version: Int, access: Int, name: String, signature: String, superName: String, interfaces: Array[String]) = {
@@ -75,4 +75,4 @@ class ClassStructureVisitor2(methodCallback: AsmVisitors.MethodCallback) extends
7575
}
7676
new MethodContentVisitor(counterCallback)
7777
}
78-
}
78+
}

codepulse/src/main/scala/com/secdec/codepulse/data/model/slick/SlickH2ProjectDataProvider.scala

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,25 @@ class SlickH2ProjectDataProvider(folder: File, actorSystem: ActorSystem) extends
4141

4242
private val cache = collection.mutable.Map.empty[ProjectId, SlickProjectData]
4343

44+
val MasterDbName = "master"
45+
val PageStoreFileSuffix = ".h2.db"
46+
val MultiVersionStoreFileSuffix = ".mv.db"
47+
4448
private object ProjectFilename {
45-
def apply(projectId: ProjectId) = s"${getDbName(projectId)}.h2.db"
49+
def apply(folder: File, projectId: ProjectId) = {
50+
val dbName = getDbName(projectId)
51+
52+
// The current H2 database driver reads existing PageStore db files
53+
// but will create new db files using MVStore.
54+
val dbPageStoreFilename = s"$dbName$PageStoreFileSuffix"
55+
if ((folder / dbPageStoreFilename).exists)
56+
dbPageStoreFilename
57+
else
58+
s"$dbName$MultiVersionStoreFileSuffix"
59+
}
4660
def getDbName(projectId: ProjectId) = s"project-${projectId.num}"
4761

48-
val NameRegex = raw"project-(\d+)\.h2\.db".r
62+
val NameRegex = raw"project-(\d+)\.(?:h2|mv)\.db".r
4963

5064
def unapply(filename: String): Option[ProjectId] = filename match {
5165
case NameRegex(ProjectId(id)) => Some(id)
@@ -54,9 +68,9 @@ class SlickH2ProjectDataProvider(folder: File, actorSystem: ActorSystem) extends
5468
}
5569

5670
private val masterData = {
57-
val needsInit = !(folder / "master.h2.db").exists
71+
val needsInit = !((folder / s"$MasterDbName$MultiVersionStoreFileSuffix").exists || (folder / s"$MasterDbName$PageStoreFileSuffix").exists)
5872

59-
val db = Database.forURL(s"jdbc:h2:file:${(folder / "master").getCanonicalPath};DB_CLOSE_DELAY=10", driver = "org.h2.Driver")
73+
val db = Database.forURL(s"jdbc:h2:file:${(folder / MasterDbName).getCanonicalPath};DB_CLOSE_DELAY=10", driver = "org.h2.Driver")
6074
val data = new SlickMasterData(db, H2Driver)
6175

6276
if (needsInit) data.init
@@ -67,7 +81,7 @@ class SlickH2ProjectDataProvider(folder: File, actorSystem: ActorSystem) extends
6781
def getProject(id: ProjectId): ProjectData = getProjectInternal(id)
6882

6983
private def getProjectInternal(id: ProjectId, suppressInit: Boolean = false) = cache.getOrElseUpdate(id, {
70-
val needsInit = !(folder / ProjectFilename(id)).exists
84+
val needsInit = !(folder / ProjectFilename(folder, id)).exists
7185

7286
val db = Database.forURL(s"jdbc:h2:file:${(folder / ProjectFilename.getDbName(id)).getCanonicalPath};DB_CLOSE_DELAY=10", driver = "org.h2.Driver")
7387
val data = new SlickProjectData(id, db, H2Driver, masterData.metadataMaster get id.num, EncountersBufferSize, EncountersFlushInterval, actorSystem)

codepulse/src/main/scala/com/secdec/codepulse/tracer/ProjectFileUploadHandler.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,13 @@ class ProjectFileUploadHandler(projectManager: ProjectManager) extends RestHelpe
6868
_.projectData.metadata.name = name
6969
}
7070

71-
hrefResponse(projectId)
71+
projectManager.getProject(projectId) match {
72+
case None =>
73+
// failed processing for some reason
74+
NotFoundResponse("There was an unknown error processing your data.")
75+
case Some(_) =>
76+
hrefResponse(projectId)
77+
}
7278
}
7379
}
7480

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Code Pulse: A real-time code coverage testing tool. For more information
3+
* see http://code-pulse.com
4+
*
5+
* Copyright (C) 2017 Applied Visions - http://securedecisions.avi.com
6+
*
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
*/
19+
20+
package com.secdec.codepulse.data.bytecode.test
21+
22+
import java.io.File
23+
import java.util.zip.{ ZipEntry, ZipFile }
24+
import org.scalatest._
25+
import org.scalatest.Matchers._
26+
import com.secdec.codepulse.util.ZipEntryChecker
27+
import com.secdec.codepulse.data.bytecode._
28+
29+
30+
class JavaSuite extends FunSpec with Matchers {
31+
describe("Uploaded Java project data") {
32+
it("should be accepted if the archive contains Java classes compiled in Java version < 8") {
33+
val file = new ZipFile(getClass.getResource("java7-compiled.jar").getPath)
34+
val entry = file.getEntry("Main.class")
35+
val stream = file.getInputStream(entry)
36+
37+
try {
38+
AsmVisitors.parseMethodsFromClass(stream)
39+
}
40+
finally {
41+
stream.close
42+
}
43+
}
44+
45+
it("should be accepted if the archive contains Java classes compiled in Java version 8") {
46+
val file = new ZipFile(getClass.getResource("java8-compiled.jar").getPath)
47+
val entry = file.getEntry("Main.class")
48+
val stream = file.getInputStream(entry)
49+
50+
try {
51+
AsmVisitors.parseMethodsFromClass(stream)
52+
}
53+
finally {
54+
stream.close
55+
}
56+
}
57+
58+
it("should not be accepted if the archive contains Java classes compiled in Java version 9") {
59+
val file = new ZipFile(getClass.getResource("java9-compiled.jar").getPath)
60+
val entry = file.getEntry("Main.class")
61+
val stream = file.getInputStream(entry)
62+
63+
try {
64+
an [IllegalArgumentException] should be thrownBy AsmVisitors.parseMethodsFromClass(stream)
65+
}
66+
finally {
67+
stream.close
68+
}
69+
}
70+
}
71+
}

project/Dependencies.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ object Dependencies {
3131
// testing
3232
lazy val junit = "junit" % "junit" % "4.5" % "test->default"
3333
lazy val specs = "org.scala-tools.testing" % "specs_2.9.0" % "1.6.8" % "test"
34-
lazy val scalatest = "org.scalatest" %% "scalatest" % "1.9.1" % "test"
34+
lazy val scalatest = "org.scalatest" %% "scalatest" % "3.0.4" % "test"
3535

3636
// extra libraries
3737
lazy val akka = "com.typesafe.akka" %% "akka-actor" % "2.2.3"
3838
lazy val reactive = "cc.co.scala-reactive" %% "reactive-core" % "0.3.2.1"
3939
lazy val concLinkedHashMap = "com.googlecode.concurrentlinkedhashmap" % "concurrentlinkedhashmap-lru" % "1.2_jdk5"
4040
lazy val asm = Seq(
41-
"org.ow2.asm" % "asm" % "4.1",
42-
"org.ow2.asm" % "asm-commons" % "4.1"
41+
"org.ow2.asm" % "asm" % "5.1",
42+
"org.ow2.asm" % "asm-commons" % "5.1"
4343
)
4444
lazy val jna = Seq(
4545
"net.java.dev.jna" % "jna" % "4.1.0",
@@ -53,7 +53,7 @@ object Dependencies {
5353

5454
// database related
5555
lazy val slick = "com.typesafe.slick" %% "slick" % "2.0.1"
56-
lazy val h2 = "com.h2database" % "h2" % "1.3.172"
56+
lazy val h2 = "com.h2database" % "h2" % "1.4.196"
5757

5858
// apache commons dependencies
5959
object commons {

0 commit comments

Comments
 (0)