Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
6f43130e
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6f43130e
编写于
11月 06, 2017
作者:
M
michaelm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8190793: Httpserver does not detect truncated request body
Reviewed-by: chegar, dfuchs
上级
08682566
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
134 addition
and
2 deletion
+134
-2
src/jdk.httpserver/share/classes/sun/net/httpserver/ChunkedInputStream.java
.../share/classes/sun/net/httpserver/ChunkedInputStream.java
+3
-1
src/jdk.httpserver/share/classes/sun/net/httpserver/FixedLengthInputStream.java
...re/classes/sun/net/httpserver/FixedLengthInputStream.java
+3
-1
test/jdk/com/sun/net/httpserver/bugs/TruncatedRequestBody.java
...jdk/com/sun/net/httpserver/bugs/TruncatedRequestBody.java
+128
-0
未找到文件。
src/jdk.httpserver/share/classes/sun/net/httpserver/ChunkedInputStream.java
浏览文件 @
6f43130e
/*
* Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
7
, 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
...
...
@@ -135,6 +135,8 @@ class ChunkedInputStream extends LeftOverInputStream {
needToReadHeader
=
true
;
consumeCRLF
();
}
if
(
n
<
0
&&
!
eof
)
throw
new
IOException
(
"connection closed before all data received"
);
return
n
;
}
...
...
src/jdk.httpserver/share/classes/sun/net/httpserver/FixedLengthInputStream.java
浏览文件 @
6f43130e
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
7
, 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
...
...
@@ -60,6 +60,8 @@ class FixedLengthInputStream extends LeftOverInputStream {
t
.
getServerImpl
().
requestCompleted
(
t
.
getConnection
());
}
}
if
(
n
<
0
&&
!
eof
)
throw
new
IOException
(
"connection closed before all data received"
);
return
n
;
}
...
...
test/jdk/com/sun/net/httpserver/bugs/TruncatedRequestBody.java
0 → 100644
浏览文件 @
6f43130e
/*
* Copyright (c) 2017, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* @test
* @bug 8190793
* @summary Httpserver does not detect truncated request body
*/
import
com.sun.net.httpserver.HttpContext
;
import
com.sun.net.httpserver.HttpExchange
;
import
com.sun.net.httpserver.HttpHandler
;
import
com.sun.net.httpserver.HttpServer
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.net.InetSocketAddress
;
import
java.net.Socket
;
import
java.nio.charset.StandardCharsets
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.logging.ConsoleHandler
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
/*
* Send two POST requests to the server which are both trucated
* and socket closed. Server needs to detect this and throw an IOException
* in getRequestBody().read(). Two variants for fixed length and chunked.
*/
public
class
TruncatedRequestBody
{
static
volatile
boolean
error
=
false
;
static
CountDownLatch
latch
=
new
CountDownLatch
(
2
);
static
class
Handler
implements
HttpHandler
{
@Override
public
void
handle
(
HttpExchange
exch
)
throws
IOException
{
InputStream
is
=
exch
.
getRequestBody
();
int
c
,
count
=
0
;
byte
[]
buf
=
new
byte
[
128
];
try
{
while
((
c
=
is
.
read
(
buf
))
>
0
)
count
+=
c
;
}
catch
(
IOException
e
)
{
System
.
out
.
println
(
"Exception caught"
);
latch
.
countDown
();
throw
e
;
}
// shouldn't get to here
error
=
true
;
latch
.
countDown
();
System
.
out
.
println
(
"Read "
+
count
+
" bytes"
);
is
.
close
();
exch
.
sendResponseHeaders
(
200
,
-
1
);
}
}
/**
* @param args the command line arguments
*/
public
static
void
main
(
String
[]
args
)
throws
IOException
,
InterruptedException
{
Logger
logger
=
Logger
.
getLogger
(
"com.sun.net.httpserver"
);
ConsoleHandler
h
=
new
ConsoleHandler
();
h
.
setLevel
(
Level
.
ALL
);
logger
.
setLevel
(
Level
.
ALL
);
logger
.
addHandler
(
h
);
InetSocketAddress
addr
=
new
InetSocketAddress
(
0
);
HttpServer
server
=
HttpServer
.
create
(
addr
,
10
);
HttpContext
ct
=
server
.
createContext
(
"/"
,
new
Handler
());
ExecutorService
ex
=
Executors
.
newCachedThreadPool
();
server
.
setExecutor
(
ex
);
server
.
start
();
int
port
=
server
.
getAddress
().
getPort
();
// Test 1: fixed length
Socket
sock
=
new
Socket
(
"127.0.0.1"
,
port
);
String
s1
=
"POST /foo HTTP/1.1\r\nContent-length: 200000\r\n"
+
"\r\nfoo bar99"
;
OutputStream
os
=
sock
.
getOutputStream
();
os
.
write
(
s1
.
getBytes
(
StandardCharsets
.
ISO_8859_1
));
Thread
.
sleep
(
500
);
sock
.
close
();
// Test 2: chunked
String
s2
=
"POST /foo HTTP/1.1\r\nTransfer-encoding: chunked\r\n\r\n"
+
"100\r\nFoo bar"
;
sock
=
new
Socket
(
"127.0.0.1"
,
port
);
os
=
sock
.
getOutputStream
();
os
.
write
(
s2
.
getBytes
(
StandardCharsets
.
ISO_8859_1
));
Thread
.
sleep
(
500
);
sock
.
close
();
latch
.
await
();
server
.
stop
(
0
);
ex
.
shutdownNow
();
if
(
error
)
throw
new
RuntimeException
(
"Test failed"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录