@@ -84,6 +84,7 @@ public CompletionStage<Void> getBody() {
84
84
85
85
@ Override
86
86
public void onSubscribe (Flow .Subscription subscription ) {
87
+ Objects .requireNonNull (subscription );
87
88
if (!subscribed .compareAndSet (false , true )) {
88
89
subscription .cancel ();
89
90
} else {
@@ -94,6 +95,7 @@ public void onSubscribe(Flow.Subscription subscription) {
94
95
95
96
@ Override
96
97
public void onNext (List <ByteBuffer > items ) {
98
+ Objects .requireNonNull (items );
97
99
for (ByteBuffer item : items ) {
98
100
byte [] buf = new byte [item .remaining ()];
99
101
item .get (buf );
@@ -104,6 +106,7 @@ public void onNext(List<ByteBuffer> items) {
104
106
105
107
@ Override
106
108
public void onError (Throwable throwable ) {
109
+ Objects .requireNonNull (throwable );
107
110
result .completeExceptionally (throwable );
108
111
}
109
112
@@ -131,6 +134,7 @@ public static class PathSubscriber implements BodySubscriber<Path> {
131
134
private final FilePermission [] filePermissions ;
132
135
private final CompletableFuture <Path > result = new MinimalFuture <>();
133
136
137
+ private final AtomicBoolean subscribed = new AtomicBoolean ();
134
138
private volatile Flow .Subscription subscription ;
135
139
private volatile FileChannel out ;
136
140
@@ -170,6 +174,12 @@ public static PathSubscriber create(Path file,
170
174
171
175
@ Override
172
176
public void onSubscribe (Flow .Subscription subscription ) {
177
+ Objects .requireNonNull (subscription );
178
+ if (!subscribed .compareAndSet (false , true )) {
179
+ subscription .cancel ();
180
+ return ;
181
+ }
182
+
173
183
this .subscription = subscription ;
174
184
if (System .getSecurityManager () == null ) {
175
185
try {
@@ -411,6 +421,7 @@ public int read() throws IOException {
411
421
412
422
@ Override
413
423
public void onSubscribe (Flow .Subscription s ) {
424
+ Objects .requireNonNull (s );
414
425
try {
415
426
if (!subscribed .compareAndSet (false , true )) {
416
427
s .cancel ();
@@ -539,6 +550,7 @@ public NullSubscriber(Optional<T> result) {
539
550
540
551
@ Override
541
552
public void onSubscribe (Flow .Subscription subscription ) {
553
+ Objects .requireNonNull (subscription );
542
554
if (!subscribed .compareAndSet (false , true )) {
543
555
subscription .cancel ();
544
556
} else {
@@ -553,6 +565,7 @@ public void onNext(List<ByteBuffer> items) {
553
565
554
566
@ Override
555
567
public void onError (Throwable throwable ) {
568
+ Objects .requireNonNull (throwable );
556
569
cf .completeExceptionally (throwable );
557
570
}
558
571
@@ -819,13 +832,21 @@ private void subscribe(Flow.Subscriber<? super List<ByteBuffer>> subscriber) {
819
832
}
820
833
}
821
834
835
+ private final AtomicBoolean subscribed = new AtomicBoolean ();
836
+
822
837
@ Override
823
838
public void onSubscribe (Flow .Subscription subscription ) {
824
- subscriptionCF .complete (subscription );
839
+ Objects .requireNonNull (subscription );
840
+ if (!subscribed .compareAndSet (false , true )) {
841
+ subscription .cancel ();
842
+ } else {
843
+ subscriptionCF .complete (subscription );
844
+ }
825
845
}
826
846
827
847
@ Override
828
848
public void onNext (List <ByteBuffer > item ) {
849
+ Objects .requireNonNull (item );
829
850
try {
830
851
// cannot be called before onSubscribe()
831
852
assert subscriptionCF .isDone ();
@@ -853,6 +874,7 @@ assert suppress(subscriptionCF.isDone(),
853
874
// onError can be called before request(1), and therefore can
854
875
// be called before subscriberRef is set.
855
876
signalError (throwable );
877
+ Objects .requireNonNull (throwable );
856
878
}
857
879
858
880
@ Override
0 commit comments