Possible bug with copying textures to render targets? How do I make copies of SDL_Textures?

Create a copy of a texture.

Create a new texture with SDL_CreateTexture, given parameters that are
queried from the other texture.
Set render target to new texture.
Perform an SDL_RenderCopy from the other texture.

Expected behaviour:
Both textures are of the same size, with the same content.

Actual behaviour:
The new texture is the size of the renderer (it seems).

Uint32 fmt;
int acs;
int w;
int h;
SDL_QueryTexture(original, &fmt, &acs, &w, &w);
SDL_Texture* copy_texture = SDL_CreateTexture(renderer, fmt, acs, w, h);
SDL_Texture* original_target = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, copy_texture);
SDL_RenderCopy(renderer, original, nullptr, nullptr);
SDL_SetRenderTarget(renderer, original_target);
SDL_Rect dst;
dst.x = 0;
dst.y = 0;
dst.w = 128;
dst.h = 16;
SDL_RenderCopy(renderer, copy_texture, nullptr, &dst);

Maybe something’s fubar with the texture access flags. In which case, I
have no idea how to make exact copies of textures.