(data []byte)
| 166 | } |
| 167 | |
| 168 | func decodeKV(data []byte) (*Pointer, error) { |
| 169 | kvps, exts, err := decodeKVData(data) |
| 170 | if err != nil { |
| 171 | if errors.IsBadPointerKeyError(err) { |
| 172 | return nil, errors.StandardizeBadPointerError(err) |
| 173 | } |
| 174 | return nil, err |
| 175 | } |
| 176 | |
| 177 | if err := verifyVersion(kvps["version"]); err != nil { |
| 178 | return nil, err |
| 179 | } |
| 180 | |
| 181 | value, ok := kvps["oid"] |
| 182 | if !ok { |
| 183 | return nil, errors.New(tr.Tr.Get("Invalid OID")) |
| 184 | } |
| 185 | |
| 186 | oid, err := parseOid(value) |
| 187 | if err != nil { |
| 188 | return nil, err |
| 189 | } |
| 190 | |
| 191 | value, ok = kvps["size"] |
| 192 | size, err := strconv.ParseInt(value, 10, 64) |
| 193 | if err != nil || size < 0 { |
| 194 | return nil, errors.New(tr.Tr.Get("invalid size: %q", value)) |
| 195 | } |
| 196 | |
| 197 | var extensions []*PointerExtension |
| 198 | if exts != nil { |
| 199 | for key, value := range exts { |
| 200 | ext, err := parsePointerExtension(key, value) |
| 201 | if err != nil { |
| 202 | return nil, err |
| 203 | } |
| 204 | extensions = append(extensions, ext) |
| 205 | } |
| 206 | if err = validatePointerExtensions(extensions); err != nil { |
| 207 | return nil, err |
| 208 | } |
| 209 | sort.Sort(ByPriority(extensions)) |
| 210 | } |
| 211 | |
| 212 | return NewPointer(oid, size, extensions), nil |
| 213 | } |
| 214 | |
| 215 | func parseOid(value string) (string, error) { |
| 216 | parts := strings.SplitN(value, ":", 2) |
no test coverage detected