anchor.diff:          {user, AttribName} when size(AttribName) > ?MAX_TAG_ATTRIB_NAME_SIZE ->
               Req:respond({403, [], ["Attribute name too big."]});
           _ ->
  -            tag_update(fun(Value) ->
  +            tag_update(fun(Value, _Size) ->
                              ddfs:replace_tag(ddfs_master, Tag, Attrib, Value,
                                               Token)
                          end, Req)
  
positive.code: 
  op('POST', "/ddfs/tag/" ++ Tag, Req) ->
      Token = parse_auth_token(Req),
      tag_update(fun(Urls) ->
          case lists:keysearch("delayed", 1, Req:parse_qs()) of
              false ->
                  ddfs:update_tag(ddfs_master, Tag, Urls, Token);
  
negative.code: 
  -spec tag_update(fun(([binary()]) -> _), module()) -> _.
  tag_update(Fun, Req) ->
      case catch Req:recv_body(?MAX_TAG_BODY_SIZE) of
          {'EXIT', _} ->
              Req:respond({403, [], ["Invalid request."]});
          BinaryPayload ->
              case catch mochijson2:decode(BinaryPayload) of
                  {'EXIT', _} ->
                      Req:respond({403, [], ["Invalid request body."]});
                  Value ->
                      case Fun(Value, size(BinaryPayload)) of
                          {ok, Dst} ->
                              okjson(Dst, Req);
                          E ->
                              error(E, Req)
                      end
              end
      end.
  
  