Skip to content

Regex.unapplySeq not null safe #8787

@scabug

Description

@scabug

NullPointerException occurs when Regex.unapplySeq is called with null.
See: https://groups.google.com/forum/#!topic/scala-language/_IAaYPUUL1s

object Main {

  def main(args: Array[String]): Unit = {
    val sdLst = List("10.12.95", null, "", "01.04.97", "1.4.97")

    for (sd <- sdLst; DMY(optYear) = sd; y <- optYear)
      yield y
  }
}

object DMY {
  val df = """(\d\d)\.(\d\d)\.(\d\d)""".r

  def unapply(s: String) = s match {
    case df(d, m, y) => Some(Some(d.toInt, m.toInt, y.toInt))
    case _ => Some(None)
  }
}

The error message:

Exception in thread "main" java.lang.NullPointerException
	at java.util.regex.Matcher.getTextLength(Matcher.java:1234)
	at java.util.regex.Matcher.reset(Matcher.java:308)
	at java.util.regex.Matcher.<init>(Matcher.java:228)
	at java.util.regex.Pattern.matcher(Pattern.java:1088)
	at scala.util.matching.Regex.unapplySeq(Regex.scala:206)
	at course.DMY$.unapply(Main.scala:22)
	at course.Main$$anonfun$main$1.apply(Main.scala:13)
	at course.Main$$anonfun$main$1.apply(Main.scala:13)
	at scala.collection.immutable.List.map(List.scala:276)
	at course.Main$.main(Main.scala:13)
	at course.Main.main(Main.scala)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions