浏览代码

grpcproxy: reject invalid watch ranges

Anthony Romano 9 年之前
父节点
当前提交
395cf7de51
共有 2 个文件被更改,包括 8 次插入0 次删除
  1. 4 0
      proxy/grpcproxy/watch.go
  2. 4 0
      proxy/grpcproxy/watcher.go

+ 4 - 0
proxy/grpcproxy/watch.go

@@ -213,6 +213,10 @@ func (wps *watchProxyStream) recvLoop() error {
 				progress: cr.ProgressNotify,
 				filters:  v3rpc.FiltersFromRequest(cr),
 			}
+			if !w.wr.valid() {
+				w.post(&pb.WatchResponse{WatchId: -1, Created: true, Canceled: true})
+				continue
+			}
 			wps.nextWatcherID++
 			w.nextrev = cr.StartRevision
 			wps.watchers[w.id] = w

+ 4 - 0
proxy/grpcproxy/watcher.go

@@ -27,6 +27,10 @@ type watchRange struct {
 	key, end string
 }
 
+func (wr *watchRange) valid() bool {
+	return len(wr.end) == 0 || wr.end > wr.key || (wr.end[0] == 0 && len(wr.end) == 1)
+}
+
 type watcher struct {
 	// user configuration