Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ResizableArray.ensureSize has an infinite loop when the new size is larger than Int.MaxValue/2 #7880

Closed
scabug opened this issue Sep 26, 2013 · 2 comments
Assignees
Labels
Milestone

Comments

@scabug
Copy link

@scabug scabug commented Sep 26, 2013

In ensureSize below, when n > Int.MaxValue then newsize: Int may overflow (newsize = newsize * 2) and become negative. Once negative the while loop will never terminate.

How to reproduce: fill an ArrayBuffer with about 2GB of Bytes.

protected def ensureSize(n: Int) {
if (n > array.length) {
var newsize = array.length * 2
while (n > newsize)
newsize = newsize * 2

  val newar: Array[AnyRef] = new Array(newsize)
  scala.compat.Platform.arraycopy(array, 0, newar, 0, size0)
  array = newar
}

}

@scabug
Copy link
Author

@scabug scabug commented Sep 26, 2013

Imported From: https://issues.scala-lang.org/browse/SI-7880?orig=1
Reporter: Feico Dillema (fwd)
Affected Versions: 2.10.1, 2.10.2

@scabug
Copy link
Author

@scabug scabug commented Dec 17, 2013

@soc said:
PR: scala/scala#3284

Feico, could you have a look and confirm that this fixes your issue? Thanks!

@scabug scabug closed this Jan 3, 2014
@scabug scabug added the library label Apr 7, 2017
@scabug scabug added this to the 2.11.0-M8 milestone Apr 7, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants