Skip to content
Permalink
Browse files

8246729: MappedByteBuffer.force() throws IndexOutOfBoundsException

Reviewed-by: psandoz, alanb
  • Loading branch information
Brian Burkhalter
Brian Burkhalter committed Jun 8, 2020
1 parent 63ade9c commit 1786701011784ba4e713d7569a3a53b10e5ce1b1
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -223,11 +223,9 @@ public final MappedByteBuffer force() {
if (fd == null) {
return this;
}
if (isSync) {
return force(0, limit());
}
if ((address != 0) && (capacity() != 0)) {
return force(0, capacity());
int limit = limit();
if (isSync || ((address != 0) && (limit != 0))) {
return force(0, limit);
}
return this;
}
@@ -278,9 +276,10 @@ public final MappedByteBuffer force(int index, int length) {
if (fd == null) {
return this;
}
if ((address != 0) && (limit() != 0)) {
int limit = limit();
if ((address != 0) && (limit != 0)) {
// check inputs
Objects.checkFromIndexSize(index, length, limit());
Objects.checkFromIndexSize(index, length, limit);
MappedMemoryUtils.force(fd, address, isSync, index, length);
}
return this;
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,20 +22,31 @@
*/

/* @test
* @bug 4625907
* @bug 4625907 8246729
* @summary Testing force()
* @library /test/lib
* @build jdk.test.lib.RandomFactory
* @run main/othervm Force
* @key randomness
*/

import java.io.*;
import java.nio.*;
import java.util.*;
import java.nio.channels.*;
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Files;
import static java.nio.file.StandardOpenOption.*;
import java.util.Random;
import jdk.test.lib.RandomFactory;

public class Force {
public static void main(String[] args) throws Exception {
Random random = new Random();
test1();
test2();
}

private static void test1() throws Exception {
Random random = RandomFactory.getRandom();
long filesize = random.nextInt(3*1024*1024);
int cut = random.nextInt((int)filesize);
File file = File.createTempFile("Blah", null);
@@ -51,4 +62,14 @@ public static void main(String[] args) throws Exception {
System.gc();
Thread.sleep(500);
}

private static void test2() throws Exception {
var path = Files.createTempFile("test", "map");
var channel = FileChannel.open(path, READ, WRITE);
MappedByteBuffer buffer =
channel.map(FileChannel.MapMode.READ_WRITE, 0, 1000);
buffer.putInt(1234);
buffer.limit(4);
buffer.force();
}
}

0 comments on commit 1786701

Please sign in to comment.
You can’t perform that action at this time.